使用NodeJS和Restify重定向客户端

时间:2013-09-04 12:34:17

标签: node.js restify passport.js

我正在为使用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进行正确的重定向?

2 个答案:

答案 0 :(得分:16)

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(或{{ 3}})。我亲自移植了几个模块,从Express到Restify,最初的主要API差异是(在Restify中):

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

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

答案 1 :(得分:11)

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

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