Express 4.x的特性和3.x的迁移
来源:互联网 发布:免费app制作软件 编辑:程序博客网 时间:2024/05/03 18:35
Express 4.x较Express 3.x进行了较大的改动,原来基于Express 3.x的项目无法直接升级到 4.x。本文对Express网站的内容进行了简单的总结,希望能够帮助大家更好的了解Express 4.x,同时方便大家迁移。
Express 4.x的主要变化
1、重新撰写Express内核,取消了原来对于Connect的依赖
2、移除了大部分Build-in的Middleware
3、Middleware可以仅对特定url前缀的请求执行,并且支持url中的参数
4、对Routing系统的扩展
取消Connect的依赖
Express 3.x是基于Connect构建的。重构后的Express 4.x取消了对Connect的依赖,变成了完全独立的模块。但由于采用一致的Middleware处理方法,新的Express 4.x仍然对Connect的所有Middleware向下兼容,所以在Express中仍然可以使用Connect的Middleware。
移除绝大多数Build-in的Middleware
Express 4.x的理念是仅专注于最核心的routing功能,而将其他组建的选择全部交由用户配置,一方面提供更好的灵活和定制性,另一方面可以始终让用户使用最新的Middleware而将其和Express的更新独立开来。其核心中仅保留了express.static,其余Middleware均需要通过npm安装并且require。下表中是主要移除的模块列表:
完整列表请参见:https://github.com/senchalabs/connect#middleware.
限定url前缀执行的Middleware
app.use('/users/:id', function(req, res, next) { console.log('ID:', req.params.id); next();})
‘/users/:id’被视作请求url的前缀,凡是以此前缀的请求(例如:’/users/yeelan0319/daily’)等等均会经过这个Middleware的处理。(与Route中的url不同,route中必须完全匹配)
注:此时得到的req.path是除去前缀后的内容
Routing系统的扩展
Express自动引用Router Middleware
原本在Express 3.x中需要app.use(app.router),而无关于app.get()等定义的位置,这造成了一定的混乱。4中彻底取消了上述命令的引用,严格按照定义的顺序执行use,get或者其他的http请求。
app.route()
app.route()方法更好的支持了REST风格的接口,减少了输入错误的风险,增强代码可读性。不得不说是非常美丽的一个解决方案!
app.route('/book') .get(function(req, res) { res.send('Get a random book'); }) .post(function(req, res) { res.send('Add a book'); }) .put(function(req, res) { res.send('Update the book'); })
详细可以参考Express Route文档。http://expressjs.com/4x/api.html#router
express.Router
express.Router是一个完整的具有Middleware和路由Routing的对象。通过
var router = require('express').Router()
实例化后,可以使用router.use()和router.get()等方法,定义一个完整的Node模块,再将router exports出去。这样实质上是定义了一个大的应用中的“微型应用”。
其他
app.listen()
新的Expess 4中不在需要使用Node的HTTP.createServer(...).listen。可以直接使用app.listen启动监听。
express generator
在Express 4.x下generator仍然使用express命令,但是必须先卸载express 3.x重新安装3后才可以使用。
npm uninstall -g expressnpm install -g express-generator
同时由generator生成的app.js文件不再执行后启动监听,而是一个独立的Node模块。所以启动的方法发生了些微的变化。
我们可以从package.json中看到:
"scripts": { "start": "node ./bin/www" },
那么bin/www下这个文件是什么内容呢?
#!/usr/bin/env nodevar debug = require('debug')('app4');var app = require('../app');app.set('port', process.env.PORT || 3000);var server = app.listen(app.get('port'), function() { debug('Express server listening on port ' + server.address().port);});
内容非常简单,require app.js这个模块,并且启动监听端口。如果希望改回Express 3.x的启动方式只需要将这部分的逻辑迁移回app.js中即可。
Express 4.x迁移总结
1、安装对应的Middleware。注意即使是上表中的对应也仅应当作为参考,因为有可能由于Middleware的升级而导致参数和返回值的变化,切忌盲目的直接安装并应用到生产环境中。
2、不需要再使用HTTP.createServer()方法,同时也不要require http模块了
3、不需要再使用app.use(app.router),将原本放在这句命令以下的Middleware移至get/post等HTTP verb的后面
4、重新安装express generator
5、仔细参考https://github.com/strongloop/express/wiki/Migrating-from-3.x-to-4.x?_ga=1.142997621.1756390127.1409921139
整体来说,express 4提供的功能更为简洁和强大,还是非常值得深入去了解和使用的。从开始使用express到现在仅仅两个月的时间版本已经从当时的4.4跃升至了4.8。
- Express 4.x的特性和3.x的迁移
- Express 4.x的特性和3.x的迁移
- NodeJs的express模块4.X
- express视图助手dynamicHelpers和helpers从2.x到3.x的变化
- Express 4.x中间件express-session的详细解析
- Jquery1.x,2.x,3.x之间各个版本的具体区别和特性
- express 4.X.X版本 npm版本3.X.X版本以上 没有layout.js文件的解决方法 页面布局设置的方法
- 翻译---express 4.x版本官网的app.set()的属性和使用方法
- express 4.x和connect安装
- X名称空间的特性(Attribute)x:key和x:type
- node.js web开发:EXPRESS 4.x 以上使用session和cookie 的记录
- node.js web开发:EXPRESS 4.x 以上使用session和cookie 的记录 - lgphp
- Express 4.x API
- nodejs:express 4.x
- Express 4.x Node.js的Web框架
- express 4.x与angular最简单的通信
- express 4.x 获取post提交的数据
- 关于node.js 4.X安装express的问题
- elasticsearch不使用analyzer
- Elixir alias, require, import
- Ember Data- Get a Model in the Console
- Emoji 的 Google 搜索结果
- Everyday Mininet Usage
- Express 4.x的特性和3.x的迁移
- express书写URL时候被刨的坑
- Express的Middleware
- FFMPEG获取视频播放时长
- Flask Web Development —— 基本应用程序结构(上)
- Flask Web Development —— 基本应用程序结构(下)
- Flask Web Development —— 模板(上)
- GCC命令选项简介
- GCD和NSOperation总结