Node.js 使用NodeJS和Restify重定向客户端

Node.js 使用NodeJS和Restify重定向客户端,node.js,restify,passport.js,Node.js,Restify,Passport.js,我正在为SPA构建一个REST后端,其中包含NodeJS、Restify和PassportJS用于身份验证。除最后一步外,一切正常,这一步是将客户端从后端/login/facebook/callback重定向到应用程序的主页 我在网上搜索了很多关于ExpressJS的答案,但是对于Node Restify还没有什么有用的。我已经找到了一些代码片段,这就是我目前正在尝试的: app.get('/api/v1/login/facebook/cb', passport.authenticate('fa

我正在为SPA构建一个REST后端,其中包含NodeJS、Restify和PassportJS用于身份验证。除最后一步外,一切正常,这一步是将客户端从后端/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执行正确的重定向?

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


res.send(302)
res.send(302,“您的响应”)

Restify的响应界面

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

该测试的内容包括:

server.get('/1', function (req, res, next) {
    res.redirect('https://www.foo.com', next);
});
许多使用Restify的人更熟悉ExpressJS。重要的是要理解(同样,在撰写本文时)影响Express插件移植的三个主要公共API差异之一是Restify中的
res.redirect
方法要求您传递
next
(或)。我个人将几个模块从Express移植到Restify,最初主要的API差异是(在Restify中):

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

我并不是说它们在本质上是相似的,而是说以上三点是通过Express插件进行移植的主要障碍。根据我在大型企业应用程序和个人项目中使用它的经验,Restify比Express有许多优势。

工作得非常好。非常感谢。接受这一点是因为无论出于何种原因,在Restity 4.3.0中,它更符合REST的预期用途,我必须包含协议
https://www.foo.com
否则它只会重定向路径。