如何在带有Express的NodeJS中同时发送res.render和res.json。我想要类似的东西:
app.get(basePath, function (req, res, next) {
//More stuff
res.json({token: token});
res.render(path.join(publicPath, '/main'),
{mv: mv});
});
但是它只给我令牌而没有渲染页面。使用此方法:
app.get(basePath, function (req, res, next) {
//More stuff
res.render(path.join(publicPath, '/main'),
{mv: mv, token: token});
});
我无权访问令牌参数(我必须将其存储在客户端中)
该想法是避免使用2个请求(一个用于页面测试令牌,另一个用于生成新令牌,重新测试旧请求)。并避免在每个视图中都带有令牌的隐藏范围。
答案 0 :(得分:1)
1)使用中间件生成令牌
2)快速提示,{token:token}
与{token}
答案 1 :(得分:1)
HTTP使用一个周期,每个请求需要一个响应。客户端发送请求时,服务器应仅将一个响应发送回客户端。这样您只需向res.render()
或res.json()
发送一个响应到客户端。
如果您想要设置一些数据,例如身份验证令牌,则可以使用res.set()
或res.header()
在标头上进行设置。 documentation
app.get(basePath, function (req, res, next) {
//More Stuff ...
res.header('token', JSON.stringify({ token: 'token' })); //use encrypted token
res.render(path.join(publicPath, '/main'), { mv: mv });
});
要为所有路由器或一组特定的路由器设置标头,可以使用middleware