码迷,mamicode.com
首页 > 其他好文 > 详细

Express从2.x迁移到3.x

时间:2015-02-12 13:53:11      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

1、 被移除一些用法

req.flash()官方建议: req.session.messages = [‘foo‘] ,有相似的效果

app.error()。官方叫:(err, req, res, next)这样用。

req.isXMLHttpRequest (现在用的 req.xhr )

res.local(foo, bar) (用 res.locals.foo = bar 或者 res.locals({ foo: bar }) 替换了)

app.dynamicHelpers() 现在这样用:use middleware + res.locals)

app.helpers() (用 app.locals)

partial()被弃用

 

2、 被改变的用法

req.header(field[, defaultValue])被req.get(field)替换了

express.createServer()简化成express()

app.register() 改了名字,叫 app.engine()

 

express3.0 安装并使用 layout 模板

1.安装express-partials。
方法一:运行cmd用npm install express-partials

方法二:在package.json里面的dependencies添加"express-partials": "*"。然后运行cmd并切换至项目目录运行npm install获得最新版。

2.app.js里面引用express-partials。

步骤一:添加引用var partials = require(‘express-partials‘);
步骤二:在app.set(‘view engine‘, ‘ejs‘);下面添加app.use(partials());

3.在需要引用模板的地方调用layout:‘模版名称‘
示例

app.get(‘/reg‘, function (req, res) {
res.render(‘reg‘, {
title: ‘用户注册‘,
layout: ‘template‘
}); 

});

 

 

express3.0 消息传递组件 flash 以及 session

1、 官方解释

https://github.com/jaredhanson/connect-flash

falsh以键值形式包装的数据存本质是放在session中的。所以,首先要向以往一样设置cookies和session,然后再使用connect-flash提供的flash中间件。

var flash = require(‘connect-flash‘);

var app = express();
app.configure(function() {

app.use(express.cookieParser(‘keyboard cat‘));
app.use(express.session({ cookie: { maxAge: 60000 }}));
app.use(flash());

});

 

 

然后,在程序里面就可以使用flash,来包裹信息了。

然后,在程序里面就可以使用flash,来包裹信息了。

app.get(‘/flash‘, function(req, res){
// Set a flash message by passing the key, followed by the value, to req.flash().
req.flash(‘info‘, ‘Flash is back!‘)
res.redirect(‘/‘);
 });
 
app.get(‘/‘, function(req, res){
// Get an array of flash messages by passing the key to req.flash()
res.render(‘index‘, { messages: req.flash(‘info‘) });
});

 


这样做的话,每个action里面都需要设置一遍,对于某些共有的消息(比如:error消息…),可以设置成全局的,不需要在每个action都去指明:

/**把变量和运算分开,这样很重要**/
 
app.use(function(req, res, next) {

var error = req.flash(‘error‘);

res.locals.error = error.length ? error:null;

var success = req.flash(‘success‘);

res.locals.success = success.length ? success:null;

res.locals.user = req.session ? req.session.user : null;

next();//因为node是单线程的,所以当前事件处理完毕,转交给下面的事件继续执行

});

 


注意:上面的

var error = req.flash(‘error‘);

res.locals.error = error.length ? error:null;

不能改成这样:

res.locals.error = req.flash(‘error‘).length ? req.flash(‘error‘):null;

这是因为:

Falsh保存的变量只会在下一次请求中被访问到,所以,上面的三目运算在赋值时,已经为空了!!!

 

Express从2.x迁移到3.x

标签:

原文地址:http://www.cnblogs.com/surahe/p/4287782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!