0

用户登录后,如何this.req.user从视图内部引用?

我认为这将涉及更新 Jade 中间件的本地集合。不过,我无法获得对这个对象的引用。

到目前为止,我一直在做以下事情......

app.use(jade.middleware({
    viewPath: __dirname + '/views',
    debug: true,
    pretty: true,
    compileDebug: true,
    locals: {
        moment: require('moment'),
        _: require('lodash')
    }
}));

然后在视图中会有这样的东西......

span=moment(new Date(item.date)).calendar()

当然,现在我有一个无法在设置时分配的用户对象。

4

2 回答 2

1

您可以使用一些库,以下是使用co-views 的方法:

'use strict';
let koa     = require('koa'),
    views   = require('co-views');

let app = koa();

let render = views(__dirname + '/jade/', {default: 'jade'});

app.use(function *controller(){
  let data;

  data = {
    user: this.req.user
  };

  this.body = yield render('jadeFileName', data);
});

我制作了一个关于使用 Jade 从 Koa 提供内容的截屏视频,这可能会有所帮助。您可以在以下位置找到它:

http://knowthen.com/episode-6-serving-content-in-koajs-with-jade/

编辑:

这是一个选项,以响应您在调用渲染时不传递用户的愿望。

'use strict';
let koa     = require('koa'),
    views   = require('co-views');

let app = koa();

let render = views(__dirname + '/jade/', {default: 'jade'});

// using custom middleware
app.use(function *(next){
  this.render = function (fileName, data){
    data = data || {};
    data.user = this.req.user;
    return render(fileName, data);
  }
  yield next;
});

app.use(function *controller(){      
  this.body = yield this.render('jadeFileName');
});
于 2015-01-26T01:03:13.993 回答
0

在您的快速配置中,您需要在对用户进行身份验证后将用户对象存储在 res.locals 中,如下所示:

app.use(function(req, res, next){
  res.locals.user = req.user;
  next();
});

然后你应该能够在你的翡翠模板中引用用户:

block content
  p= user.email
于 2015-01-25T20:08:20.477 回答