【问题标题】:Redirecting client with NodeJS and Restify使用 NodeJS 和 Restify 重定向客户端
【发布时间】:2013-09-07 23:12:48
【问题描述】:

我正在使用 NodeJS、Restify 和 PassportJS 为 SPA 构建 REST 后端以进行身份​​验证。一切正常,除了最后一步,将客户端从后端 /login/facebook/callback 重定向到应用程序的主页。

我在网上搜索了很多关于 ExpressJS 的答案,但对 Node-Restify 没有任何用处。我已经设法获取了一些 sn-ps 代码,这就是我目前正在尝试的:

app.get('/api/v1/login/facebook/cb', passport.authenticate('facebook', { scope: 'email' }), function(req, res) {
    req.session.user = req.user._id;
    res.header('Location', '/#/home');
    res.send();
});

已发送响应,但未包含位置标头,并且客户端显示为白屏。如何使用 Node-Restify API 进行正确的重定向?

【问题讨论】:

    标签: node.js restify passport.js


    【解决方案1】:

    Restify 的响应接口now has a redirect method

    在撰写本文时,有一个测试显示如何使用它here

    该测试的内容是:

    server.get('/1', function (req, res, next) {
        res.redirect('https://www.foo.com', next);
    });
    

    许多使用 Restify 的人更熟悉 ExpressJS。重要的是要理解(在撰写本文时)影响 Express 插件移植的三个主要公共 API 差异之一是 Restify 中的 res.redirect 方法要求您传递 next(或 an InternalError is thrown)。我亲自将几个模块从 Express 移植到 Restify,最初的主要 API 差异是(在 Restify 中):

    • server.use 仅适用于路径和 HTTP-method-agnostic 中间件
    • res.redirect 要求你通过 next
    • 某些成员或Request接口是方法而不是值,例如req.pathreq.path 是 Restify 中 req.getPath 的别名

    说它们在底层是相似的,但以上三件事是移植 Express 插件的主要障碍。根据我在大型企业应用程序和个人项目中使用它的经验,Restify 比 Express 有很多优势。

    【讨论】:

    • 接受这一点,因为它更符合 Restify 的预期用途
    • 无论出于何种原因,对于 Restity 4.3.0,我必须包含协议 https://www.foo.com 否则它只会重定向路径。
    【解决方案2】:

    您需要使用重定向状态码 302。

    res.send(302);res.send(302, 'your response');

    【讨论】:

    • 完美运行。谢谢!
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多