【发布时间】:2017-07-23 21:35:40
【问题描述】:
我有一个车把模板,其中包含两个部分和一个从上下文填充的数据。
<h1>Welcome to {{title}}</h1>
<div id="views">
<div id="place">{{> place}}</div>
<div id="player">{{> player}}</div>
</div>
现在在 ExpressJS 路线上,我正在执行以下操作:
var express = require('express');
var router = express.Router();
var gameDal = require('../app/DAL/gameRepository');
router.use('/', (req, res, next) => {
if(!res.locals.gameContext) res.locals.gameContext = {};
gameDal.getGame(0).then(game => {
res.locals.gameContext.player = game.player;
res.locals.gameContext.place = game.place;
req.gameTitle = game.title;
next();
});
});
router.get('/', (req, res) => {
res.render('home', { "title": req.gameTitle });
});
module.exports = router;
代码按预期工作,但如果我从“then”回调中取出“next()”语句,则两个部分都将正确填充接收到的数据,但“gameTitle”值未定义。
换句话说,以下内容不会替换模板中的 {{title}} 值,因为在渲染模板时,req.gameTitle 值是“未定义”:
router.use('/', (req, res, next) => {
if(!res.locals.gameContext) res.locals.gameContext = {};
gameDal.getGame(0).then(game => {
res.locals.gameContext.player = game.player;
res.locals.gameContext.place = game.place;
req.gameTitle = game.title;
});
next();
});
所以我的问题是:
- 为什么部分填充了数据而包含模板没有填充?
- 将“next()”语句保留在 Promise 回调中会有什么影响?
- 如果承诺被拒绝怎么办?
谢谢。
【问题讨论】:
标签: node.js express promise handlebars.js