在使用请求承诺后,是否可以使用express重新呈现

时间:2018-03-30 21:31:30

标签: node.js express

我正在使用expressrequest-promise。在我的请求承诺之后,我无法让它重新渲染。我怎么做到这一点?

app.get('/v1/mymacro', addon.authenticate(), function (req, res) {
        var rp = require('request-promise');
        var url = "some-url-that-will-redirect";

        res.render('page-1', {
            url: ""
        });

        var r = rp.get(url, function (err, res, body) {            
            url = res.request.uri.href;
            res.render('different-page', {
                url: url
            });                
        })
    }
);

1 个答案:

答案 0 :(得分:0)

  

使用请求承诺后,是否可以使用express重新呈现

不,您无法为同一请求拨打res.render()两次。完成对res.render()的第一次调用后,http连接将关闭,响应结束。第二次调用它不会向客户端发送任何内容,并会从Express生成警告。

此外,您的request-promise代码存在错误。它返回一个promise,你应该使用那个promise,而不是试图传递一个回调。如果您想使用回调,请使用request库,而不是request-promise

对于请求承诺,应采用以下形式:

rp.get(...).then(...).catch(...);

另外,代码行:

url = res.request.uri.href;

看起来不正确。如果你用这个代码解释你想要完成什么,那么也许我们可以建议一个解决方案。