怎样在服务器上运行node.js
首先安装nodejs环境,windows可以直接下载安装包,下一步到底就可以了~~linux可以使用不同发行版的包管理器(但通常版本都不是最新的),使用最新版本可以从官网下载压缩包,然后解压就可以了,运行nodejs代码只需要在命令行中运行node XXXjs(xxxjs为你的代码文件,如果没有将node添加到环境变量,则需要进入node的目录在执行上述命令)~ok 貌似就是这样了~
js全称JavaScript,是运行在浏览器上的脚本语言,连续多年被评为全球最受欢迎的编程语言。js可以:1、使网页具有交互性,例如响应用户点击,给用户提供更好的体验;2、还可以根据用户的操作,动态的创建页面。
JS即Javascript,Javascript是一种由Netscape的LiveScript发展而来的脚本语言,连续多年被评为全球最受欢迎的编程语言。js可以:1、使网页具有交互性,例如响应用户点击,给用户提供更好的体验;2、还可以根据用户的操作,动态的创建页面。
主要目的是为了解决服务器终端语言,比如Perl,遗留的速度问题。当时服务端需要对数据进行验证,由于网络速度相当缓慢,只有288kbps,验证步骤浪费的时间太多。于是Netscape的浏览器Navigator加入了Javascript,提供了数据验证的基本功能。
Javascript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。Javascript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。
二者主要区别:
传统的页面是服务器端接收到客户端请求后,将数据和页面组装一起返回,之后如果有部分数据或部分页面要替换,可以使用ajax实现。
但在angularjs中,服务器端接收请求后,只是返回了母版页,客户端根据此母版页加载js和html,各个js框架会根据自己的语法渲染html;客户端请求的那个路径只会被请求一次,之后的逻辑和页面数据加载均由js完成(jsonp请求)。
我们在日常开发中,url在#之前的都是后端mvc的参数,#后面的是spa的路由和参数。
正如楼上所说的,js只能操作客户端的东西。在客户端时刻显示并更新服务器的时间应该是不可能的,因为会由于网络延迟的因素使得时间不精确。
打个比方,可以使用ajax每秒钟获取服务器的时间,然后再显示出来,但是可能这个用户的网络延迟比较厉害,他请求的这个时间过了两三秒才返回给客户端,那这样更新时间就不精确了。
也可以这样,第一次从服务器那里获取时间,然后再客户端用js,每秒累加数,就是以获取服务器的那个时间为起掉,用客户端代码每秒累加这个时间
准备
首先,需要安装nodejs,这个可以去官网下载,目前我本地安装的v012版本。
安装完成后可以通过命令行测试安装是否成功,输入:node -v,应该会显示当前安装node版本号。
本文中用到的模块,都是nodejs核心模块,不需要从外部下载,如果有需要,可以使用以下命令安装:npm install xxx。
开始
下一步,新建js文件,可以命名为serverjs,代码如下:
var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
var dir, arg = processargv[2] || ''; // 命令行第三个参数,用来接收目录,可为空,相对当前serverjs文件的目录名称
// 比如使用命令 node server debug,意思就是debug文件夹与serverjs文件同级
// 且你想以debug文件夹启动web服务
httpcreateServer(function (req, res) {
var pathname = __dirname + urlparse(requrl)pathname;
dir = dir dir : pathname; // 记住dir(目录)
pathname = dir pathnamereplace(dir, dir + arg + '/') : pathname; // 替换文件静态路径
if (pathextname(pathname) == "") {
pathname += "/";
}
if (pathnamecharAt(pathnamelength - 1) == "/") {
pathname += "indexhtml"; // 入口文件,此处默认indexhtml
}
fsexists(pathname, function (exists) {
if (exists) {
switch (pathextname(pathname)) {
case "html":
reswriteHead(200, {"Content-Type": "text/html"});
break;
case "js":
reswriteHead(200, {"Content-Type": "text/javascript"});
break;
case "css":
reswriteHead(200, {"Content-Type": "text/css"});
break;
case "gif":
reswriteHead(200, {"Content-Type": "image/gif"});
break;
case "jpg":
reswriteHead(200, {"Content-Type": "image/jpeg"});
break;
case "png":
reswriteHead(200, {"Content-Type": "image/png"});
break;
default:
reswriteHead(200, {"Content-Type": "application/octet-stream"});
}
// res可以自己添加信息来简单交互 比如可以修改点header信息 或者修改返回的资源数据
fsreadFile(pathname, function (err, data) {
resend(data);
});
}
else {
reswriteHead(404, {"Content-Type": "text/html"});
resend("<h1>404 Not Found</h1>");
}
});
})listen(8085, "127005"); // 服务器端口
consolelog("server running at http://127005:8085/");
启动
当node安装完成及上述serverjs文件也新建好之后。将其与你要访问的文件夹放在一起,可以放同层或者直接下层。比如,如果你要访问d:\test\debug文件夹。
你可以先将当前文件放入同层或者直接下,然后输入如下命令启动web服务:
先打开`cmd`,进入server文件所在目录,比如是`test`目录;
然后输入:`node server debug`(同层), 或者`node server`(子层),
此时会提示`server running at http://127005:8085/`, 表示启动服务成功;
最后打开浏览器,进入:`127005:8085`,即可访问此资源。
最后
简单解释下上面的代码。
首先最上面的require表示需要用到那几个模块,先引用一下;
arg表示输入的命令行的第三个参数,上面是做了手动截取;
createServer方法表示创建一个http服务,以函数为参数,本文代码中传入了一个匿名函数;
req,表示http request(请求)对象,其携带着来自客户端此次http请求的相关信息,例如请求method、请求query参数、请求header头信息等;
res,表示http response(返回)对象,用来给客户端返回请求资源用,可以手动添加信息,例如返回的数据、返回的头信息等、返回的code等;
fs,表示文件资源对象,具体可以访问nodejs官网的api;
path,表示资源路径对象,具体可以访问nodejs官网的api。
listen表示创建的服务监听,一旦访问了此端口,将进入此前的匿名函数回调中,将资源返回给客户端。
js遵循同源规则,如果你js调取的是本服务器的资源,那么就不会出现跨域的问题,如果是调取其他域名下的资源,那么就会存在跨域问题,可以用ajax返回jsonp的形式解决,也可以用后台执行curl,然后在前台用ajax获取后台的结果解决跨域问题
0条评论