我现在登录后,用户信息保存在session里, 然后每个页面都要显示用户名,这块区域是在页面最上方的, 我要怎么做合理呢,还是每个页面都从session里往前端传
前端用AJAX呗,不要跳转URL。 如果你要SEO,那就每个页面渲染的时候往前端传就是了
@MiguelValentine 不太理解啊,这跟ajax什么关系啊,我的意思就是每个页面渲染的时候 都要传,那不是很麻烦
@tofrookie 用模板 EJS或者JADE之类的,头部写一个模板就行了。
顶@MiguelValentine, Controller层每个页面都要传的
@klamtlne 恩,我说的就是controller层,除了每个传没有别的办法吗
@tofrookie 服务端往客户端传数据,这一步是省略不掉的,你用模版(比如ejs)显示title也还是要配置参数的:res.render({title: 'some title'})
这个插件可以帮助节省一些重复劳动: https://github.com/dwightjack/grunt-ejs-render
写一个 dynamicHelper。
如果你用 express 的话,就写一个全局中间件,每次有访问都将 res.locals.current_user
赋值为 req.session.user
,这样就可以在 view 中直接使用 current_user
了。
@alsotang 这个助手 express4.0不是不能用了吗
@alsotang 谢啦,已解决
@alsotang 我刚看了下文档,原来我locals用错了,我开始就是写全局中间件的
@alsotang 这方法略屌,学习了
@alsotang 这里还有个问题,写了一个userLoged函数:
exports.userLoged = function (req, res, user) {
res.locals.user = req.session.user = user
}
之后在view层如果直接这样要报错的
<h1><%- res.locals.user %></h1>
在 res.render
中传参这一步还是省略不掉吧
@klamtlne 你的 userLoged 中间件需要重写,现在这样写是不对的。next 参数都没有接收。
@alsotang next
这个函数我理解是如果你访问 /user/edit
,如果这个请求的handler直接调用 next()
,请求会被指到 /user
(如果有的话)来操作。
这里是用户登录后把用户保存到locals,登录的操作发生在 post: /login
,为什么要使用next呢?
@klamtlne 你看看 nodeclub 源码的这一部分实例嘛
@alsotang
我造了,app.get('/follow', user.required, user.follow)
这里,在user.required调用 next() 的话就会到user.follow
( ´ ▽ ` )
@klamtlne 嗯嗯对的
@alsotang 我作死把route这里重写了,在contoller里根据文件名分流,破坏了原来的中间件机制(具体可见:https://github.com/klamtlne/Nodelog/blob/master/controllers/index.js ) ,我得想想怎么把中间件加进去…