使用NodeJS和Restify重定向客户端

Rou*_*tor 14 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();
});
Run Code Online (Sandbox Code Playgroud)

发送响应但不包括位置标题,并向客户端显示白屏.如何使用Node-Restify API进行正确的重定向?

jam*_*ack 16

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

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

该测试的内容是:

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

许多使用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方面具有许多优势.


vin*_*ayr 11

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

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