Как получить доступ к зарегистрированному пользовательскому объекту в представлении?
Как пользователь вошел в систему, как я могу ссылаться 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