Как получить доступ к зарегистрированному пользовательскому объекту в представлении?

Как пользователь вошел в систему, как я могу ссылаться 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()

Конечно, теперь у меня есть пользовательский объект, который не может быть назначен при настройке.

2 ответа

Решение

Есть несколько библиотек, которые вы можете использовать, вот как вы могли бы сделать это с совместным просмотром:

'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);
});

Я сделал скринкаст о подаче контента от Коа с Джейд, что может быть полезно. Вы можете найти его по адресу:

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');
});

В вашей экспресс-конфигурации вам нужно сохранить объект пользователя в res.locals после аутентификации пользователя, что-то вроде этого работает:

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

Тогда вы сможете ссылаться на пользователя в своих шаблонах Jade:

block content
  p= user.email
Другие вопросы по тегам