15

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

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

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 进行正确的重定向?

4

2 回答 2

20

Restify 的 Response 接口现在有一个redirect方法

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

该测试的内容是:

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

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

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

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

于 2015-09-05T00:50:23.040 回答
11

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

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

于 2013-09-04T14:34:01.917 回答