在这一点上,我一直在研究一个非常基本的 nodejs 问题太久了,我被困住了。其他人也问过类似的问题,但由于某种原因,答案似乎对我不起作用。
背景:
我只是在使用带有 Express、Backbone 和 Passport 的 NodeJS 进行身份验证。Passport 将用户对象存储在请求中,因此我试图将其传递给我的 Backbone 视图。
我一直使用 Node Cellar 项目作为起点,并跟随他们的领导,通过 Backbone.Router.extend 显示我的大部分视图。
我正在尝试做的事情:
我只想将用户对象传递给视图和显示,例如我的模板中的名称。
我试过的:
我正在使用类似于下面的中间件将我的用户传递给模型
app.use(function(req, res, next){
res.locals.user = req.user;
next();
});
当我直接使用 app.get 时,我可以确认它是否有效:
app.get('/test',function index(req, res) {
res.send(res.locals.user);
});
但是,如果我在 HeaderView.html 文件中包含以下内容,一切都会崩溃(即使我可以确认用户是通过 app.get 定义的):
<%= user === null ? "No user" : user %> (or user.name.familyName, etc.)
我在控制台中收到以下错误:
Uncaught ReferenceError: user is not defined
这是我的 main.js 的样子:
var AppRouter = Backbone.Router.extend({
routes: {
"home" : "home"
},
initialize: function () {
this.headerView = new HeaderView();
$('.header').html(this.headerView.el);
var footerView = new FooterView();
$('#footer').html(footerView.el);
},
home: function (id) {
if (!this.homeView) {
this.homeView = new HomeView();
}
$('#content').html(this.homeView.el);
},
});
utils.loadTemplate(['HomeView'], function() {
app = new AppRouter();
Backbone.history.start();
});
这是我设置快递的方式:
app.set('port', process.env.PORT || 3000);
app.use(express.logger('default')); /* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser()),
app.use(express.static(path.join(config.root, 'public')));
app.use(express.cookieParser('optional secret string'));
app.use(express.session({ secret: 'my secret secret key' }));
app.use(passport.initialize());
app.use(passport.session());
有什么想法吗?