当前位置:编程学习 > JS >>

Express.js 中文入门指引手册

Express是基于node.js,高性能、一流的MVC-web开发框架,并且支持jade等多种模板

    本手册由一回于 2011-4-24 首次翻译,感觉翻译的不错,特收藏在自己的学习笔记中,如今已经过去接近一年,express 最新的版本已经与当时翻译有些脱节,目前自己也会及时翻译最新的内容及时更新维护,并加入自己的内容,供自己学习及使用,也方便大家针对细节进行讨论,并请指出翻译不当之处。

 

>>express 的安装

1
$ npm install express
或者

1
$ npm install  -g express
或者

1
npm install express -gd
备注:-g代表安装到NODE_PATH的lib里面,而-d代表把相依性套件也一起安装。

如果沒有-g的话会安装目前所在的目录(会建立一个node_modules的文件夹),你可以透过以下指令来比较两者的不同: npm list -g npm list

    测试Express环境是否搭建成功

    在win下进入cmd

    $express testapp

    $cd testapp

    $npm install

    $node app.js

  

>>创建服务器

    要创建 express.HTTPServer 的实例,只需简单的调用 createServer() 方法即可。通过 HTTPServer 实例 app 我们可以定义基于 HTTP 动作(HTTP verbs)的路由(routes),本例中为 app.get()。

1
var app = require('express').createServer();
2
 
3
app.get('/', function(req, res){
4
 
5
  res.send('hello world from csser.com!');
6
 
7
});
8
 
9
app.listen(3000);
    require()是node.js提供的函数,可以让你引入其他模块以调用模块的函数和变量,默认情况下node.js会在$NODE_PATH和目前js所在目录下的node_modules文件夹下去寻找模块。require也可以用来载入自己写的模块,这样涉及到node.js的模块机制,后面有机会在介绍。

 

>>创建 HTTPS 服务器

    要初始化一个express.HTTPSServer实例,与上例相似,不同的是在createServer方法我们传入一个对象作为配置参数,该对象接受 key, cert 和其它在NodeJS https文档中提到的配置参数。
1
var app = require('express').createServer({ key: ... });


>>配置

    Express支持多工作环境,比如生产环境和开发环境等。开发者可以使用configure()方法根据当前环境的需要进行设置,当configure()没有传入环境名称时,它会在各环境之前被调用(一回注:相当于被各个明确环境所共享)。

    下面的示例我们只抛出异常(dumpException),并且在开发模式对异常堆栈的输出做出响应,但是不论对开发或者生产环境我们都使用了methodOverride和bodyParser。特别注意对app.router的使用,它可以被用来设置应用的路由(可选),否则首次对app.get()、app.post()等的调用会设置路由。

    // 定义共享环境

1
app.configure(function(){
2
 
3
    app.use(express.methodOverride());
4
 
5
    app.use(express.bodyParser());
6
 
7
    app.use(app.router);
8
 
9
});
    // 定义开发环境

1
app.configure('development', function(){
2
 
3
    app.use(express.static(__dirname + '/public'));
4
 
5
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
6
 
7
});
    // 定义生产环境

1
app.configure('production', function(){
2
 
3
    var oneYear = 31557600000;
4
 
5
    app.use(express.static(__dirname + '/public', { maxAge: oneYear }));
6
 
7
    app.use(express.errorHandler());
8
 
9
});
    对于内部和多重设置(internal和arbitrary),Express提供了 set(key[, val]), enable(key), disable(key)等方法:

01
app.configure(function(){
02
 
03
   app.set('views', __dirname + '/views');
04
 
05
   app.set('views');
06
 
07
   // => "/absolute/path/to/views"
08
 
09
   app.enable('some feature');
10
 
11
   // 与 app.set('some feature', true); 相同
12
 
13
   app.disable('some feature');
14
 
15
   // 与 app.set('some feature', false); 相同
16
 
17
   app.enabled('some feature')
18
 
19
   // => false
20
 
21
});
    要修改环境,可以通过设置NODE_ENV环境变量来实现,例如:

1
$ NODE_ENV=production node app.js
    这很重要,因为许多的缓存机制只有在生产环境才会启用。

 

>>设置

    Express 支持以下设置项:

    home为res.redirect()提供应用的基准路径,透明的处理已安装的应用。

    views视图(views)层的根目录,默认指向CWD/views

    view engine默认的视图(view)引擎的名字,不包含扩展名。

1
app.set('views', __dirname + '/views');
2
app.set('view engine', 'jade');
    上面两行是设置views文件夹,即模板文件夹,__dirname是node.js里面的全局变量,即取得执行的js所在的路径,另外__filename是目前执行的js文件名。所以,app.set(‘views’, __dirname + ‘/views’);是设置views的文件夹。 而app.set('view engine', 'jade');是设置express.js所使用的render engine。除了Jade之外,express.js还支持EJS(embedded  javascript )、Haml、CoffeScript和 jQuery template等js模板。
    view options用于设置全局视图选项的对象

 

>>路由

    Express利用HTTP动作提供了有意义并富有表现力的URL映射API,例如我们可能想让用户帐号的URL看起来像/user/12的样子,下面的例子就能实现这样的路由,其中与占位标识符(本例为:id)相关的值可以被req.params获取到。

1
app.get('/user/:id', function(req, res){
2
 
3
    res.send('user ' + req.params.id);
4
 
5
});
    上例中当我们访问/user/12时返回“user 12”, csser注:app.get相当于在服务器注册了一个监听get请求事件的侦听器,当请求的URL满足第一个参数时,执行后面的回调函数,该过程是异步的。

    路由是一个可以被内部编译成正则表达式的简单字符串,比如当/user/:id被编译后,被内部编译后的正则表达式字符串看起来会是下面的样子(简化后):

1
\/user\/([^\/]+)\/?
    要实现复杂点的,我们可以传入正则表达式直接量,因为正则捕获组是匿名的因此我们可以通过req.params进行访问,第一个捕获组应该是req.params[0],第二个应该是req.params[1],以此类推。

1
app.get(/^\/users?(?:\/(\d+)(?:\.\.(\d+))?)?/, function(req, res){
2
 
3
    res.send(req.params);
4
 
5
});
    通过Linux的curl命令来测试我们定义的路由:

01
$ curl http://cssercom:3000/user
02
 
03
[null,null]
04
 
05
$ curl http://cssercom:3000/users
06
 
07
[null,null]
08
 
09
$ curl http://cssercom:3000/users/1
10
 
11
["1",null]
12
 
13
$ curl http://cssercom:3000/users/1..15
14
 
15
["1","15"]
    下面是

补充:web前端 , JavaScript ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,