Nodejs Express同时发送res.render和res.json

时间:2019-02-08 07:52:55

标签: node.js express

如何在带有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个请求(一个用于页面测试令牌,另一个用于生成新令牌,重新测试旧请求)。并避免在每个视图中都带有令牌的隐藏范围。

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