我正在为使用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进行正确的重定向?
答案 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
req.path
。 req.path
是Restify中req.getPath
的别名我 NOT 说他们是相似的,但上述三件事是移植Express插件的主要障碍。根据我在大型企业应用程序和个人项目中使用它的经验,Restify在Express方面具有许多优势。
答案 1 :(得分:11)
您需要使用重定向状态代码302。
res.send(302);
或res.send(302, 'your response');