@kexinWeb
2017-03-11T17:39:09.000000Z
字数 4762
阅读 934
- node是js的服务器运行环境。
- js刚开始只能在浏览器端运行,而node为它提供了可以在服务器端运行的环境,从这个意义上说,node有点像js的虚拟机。
- Node提供大量工具库,使得JavaScript语言与操作系统互动(比如读写文件、新建子进程),在这个意义上,Node又是JavaScript的工具库。
- Node非常适用于有很高的流量,但不需要处理大量逻辑的场景。
nvm:Node Version Manager 管理Node版本的工具,由于Node更新换代很快,学会用nvm还有n管理Node版本也是一项必备技能
安装方法
$ curl https://raw.github.com/creationix/nvm/v0.4.0/install.sh | sh
或
$ wget -qO- https://raw.github.com/creationix/nvm/v0.4.0/install.sh | sh
使用方法
安装Node
$ nvm install 0.1
使用某个版本的node
$ nvm use 0.10
查看当前已安装版本
$ nvm ls
查看当前使用版本
$ nvm current
以指定版本运行脚本
$ nvm run 0.10.24 myApp.js
n:是Node的一个模块,也用于管理Node版本
$ sudo npm install -g n
$ n
$ n latest
$ n 0.11.12
$ n stable
$ n rm 0.11.12
$ n run 0.11.12 app.js
存放项目所安装的依赖包的文件夹,在项目的根目录下。
- package.json 定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。
- 直接运行
npm install
可以加载整个项目所需要的依赖项,并把相关模块安装在node_modules文件夹中。- 除此之外,还有很多配置可以在 package.json 文件中进行配置
初始化
定位到当前项目文件目录
运行 $ npm init
,然后按照指示就会在根目录直接生成 package.json 文件
package.json的各项重要配置说明
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js"
}
dependencies与devDependencies
dependencies字段指定了项目运行所依赖的模块,devDependencies指定项目开发所需要的模块。
它们真正的区别是,devDependencies 下列出的模块,是我们开发时用的,比如 grunt-contrib-uglify,我们用它混淆 js 文件,它们不会被部署到生产环境。dependencies 下的模块,则是我们生产环境中需要的依赖。
如果一个模块不在package.json文件之中,可以单独安装这个模块,并使用相应的参数,将其写入package.json文件之中。
$ npm install express --save
$ npm install express --save-dev
$ npm install
require('moduleName')
就会加载这个文件。这个字段的默认值是模块根目录下面的index.js。一般为整个项目的入口文件
$ npm install -g <packageName>
$ npm install <packageName>
$ npm root -g
$ cnpm root -g
$ npm config set prefix "全局路径"
var isTrue = function(value, callback) {
if (value === true) {
callback(null, "Value was true.");
}
else {
callback(new Error("Value is not true!"));
}
}
var callback = function (error, value) {
if (error) {
return console.log(error);
}
console.log(value);
}
//http模块,http是node的核心模块,无需重新安装
var http = require('http');
//req是客户端请求,res是服务端响应
http.createServer(function(req, res) {
//一般的服务器端语言把这些都封装好了,但是Node要求你都要自己做。
res.writeHead(200, {'Content-Type' : 'text/plain'});
res.end('Hello keke!');
}).listen(8123, '127.0.0.1');//8123端口监听
console.log('Server running on port 8123');
运行 $ node createServer.js
打开浏览器,键入 127.0.0.1:8123
可以看到项目运行的结果
Express框架的核心是对http模块的再包装。
关于send和end
response.writeHead(200, {"Content-type": "text/plain"});
那么就用response.end()
response.send()
response.redirect("/hello/anime");//可以采用相对路径
response.redirect("http://www.example.com");//可以直接输入网址
response.sendFile("/path/to/anime.mp4");
app.get("/", function(request, response) {
response.render("index", { message: "Hello World" });
});
第一个参数为模板,第二个参数为数据。
app.use(express.static('public'));
注意静态文件目录并不是项目目录,项目目录为__dirname
app.set("views", __dirname + "/views");
app.set("view engine", "ejs");
use是express注册中间件的方法
由于第二个中间件没有调用next方法,所以request对象就不再向后传递了。
use方法内部可以对访问路径进行判断,据此就能实现简单的路由,根据不同的请求网址,返回不同的网页内容。
除了在回调函数内部判断请求的网址,use方法也允许将请求网址写在第一个参数。这代表,只有请求路径匹配这个参数,后面的中间件才会生效。无疑,这样写更加清晰和方便。
安装
$ npm install ejs --save
或
$ cnpm install ejs --save(推荐使用)
指向当前运行的脚本所在的目录。
指向当前运行脚本的文件名