请教下关于res.locals的问题
发布于 12 年前 作者 douya0808 17302 次浏览 最后一次编辑是 8 年前

以下这两种将元素传递给前台的方式有什么区别吗?我试验了效果一样

app.get('/', function(req,res){
        res.locals.test="test";//???
        res.render('index',{
            title:'主页',
            user: req.session.user,
            posts:posts,
            success:req.flash('success').toString()
        });
});


app.get('/', function(req,res){
    res.render('index',{
        title:'主页',
        user: req.session.user,
        posts:posts,
        test:"testData",//???
        success:req.flash('success').toString()
    });
});

都能在ejs通过<%=locals.testData%>或<%=test%>获取数据,那上面的两种写法有什么区别吗?

在微博的那个示例中,直接将res.locals写在了app.js中,那这个locals是针对哪个请求呢呢?难道是全局请求?那岂不是和app.locals一样了?

app.use(function(req,res,next){
var err = req.flash('error'),
    success = req.flash('success');
res.locals.user = req.session.user;
res.locals.error = err.length ? err : null;
res.locals.success = success.length ? success : null;
next();
});

求指点

6 回复

<%=locals.testData%> 是整站全局的,一般存放用户全局信息,session和一些整站配置变量

<%=test%> 只是针对render下的页面 变量

前辈你好 app.locals不也是整站全局的吗?

前辈我查了下文档,关于app.use app.use([path], function) Use the given middleware function, with optional mount path, defaulting to “/”.

是不是说写在app.use中的res.locals数据只能在请求路径"/"对应的render页面中进行访问呢?

不只是 在“/” 所有地址都有效,app.locals,你是哪里看到的? 一般来说,设置整站的全局变量都这样设置 res.locals.current_user = req.session.user;

我google时上面说2.x->3.x的过程中app.helpers()和app.dynamicHelpers()已经被替换成了app.locals和res.locals,而且app.helpers我也试验过了 确实是全局的

http://cnodejs.org/topic/4f72d6478a04d82a3d2f2d51 这为小哥的这个帖子和我第一个帖子一样 如果没错的话我就先这么理解就好了

但是第二个还是没有明白=。=

回到顶部