Express2.X迁移至3.X注意事项
这些是我在迁移中遇到的一些问题和解决办法,其实这里有一个更详细的。
如果你有迁移时遇到的问题,可以在下面留言,我再补充这个文章。
应用程序初始化
这个是比较大,以前的代码是
var app = express.createServer()
app.listen(8080);
现在改为
var app = express();
require('http').createServer(app).listen(8080);
详见:app.listen
模板
2.0的模板调用方法和3.0有很大区别,所以之前的
app.register(".html", require("jqtpl").express);
这样的使用方法是不能用了
3.0的文档里推荐了使用一个小模块consolidate.js来处理。
var engines = require('consolidate');
app.engine('html', engines.jqtpl);
同时由于去掉了res里的layout属性,你的网站可能显示不正常了,如果你需要支持layout,需要使用express-partials
PS:推荐你直接使用jade吧,用jade的extend、block和include在模板里控制模板自己的继承和包含会感觉更爽。
错误处理
2.x的时候使用的形式是
app.error = function(fn){
this.use(function(err, req, res, next){
fn.apply(this, arguments);
});
};
现在是完全中间件形式,只是多一个参数,你也可以看看这里
app.use(function(err, req, res, next){
res.send(500, { error: 'something error!' });
})
模板附加量
用处比较多,比如在所有的模板上加上用户信息
app.dynamicHelpers({
user : function(){
var user = getUser();
return user;
}
})
现在必须使用中间件配合app.locals来使用
app.use(function(res, req, next){
app.locals.user = getUser();
next()
})
或者
app.use(function(res, req, next){
app.locals({
user : getUser()
});
next()
})