Перенаправление клиента с NodeJS и Restify
Я создаю REST-сервер для SPA с NodeJS, Restify и PassportJS для аутентификации. Все работает, кроме последнего шага, который перенаправляет клиента из backends /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 ответа
Интерфейс Restify's Response теперь имеет redirect
метод.
На момент написания статьи здесь есть тест, показывающий, как его использовать.
Содержание этого теста:
server.get('/1', function (req, res, next) {
res.redirect('https://www.foo.com', next);
});
Многие люди, которые используют Restify, более знакомы с ExpressJS. Важно понимать, что (опять же, на момент написания этой статьи) одно из трех основных различий в API, влияющих на перенос плагинов Express, заключается в том, что res.redirect
метод в Restify требует от вас пройти next
(или выдается InternalError). Я лично перенес несколько модулей из Express в Restify, и основные отличия API сначала (в Restify):
server.use
только для промежуточного программного обеспечения, независимого от пути и HTTP-методаres.redirect
требует, чтобы вы прошлиnext
- Некоторые члены или интерфейс запроса являются методами, а не значениями, такими как
req.path
,req.path
псевдонимreq.getPath
в Restify
Я НЕ говорю, что под капотом они похожи, но вышеупомянутые три вещи являются основными препятствиями для портирования через плагины Express. В моем опыте Restify имеет много преимуществ по сравнению с Express, используя его как в крупных корпоративных приложениях, так и в личных проектах.
Вам необходимо использовать код состояния перенаправления 302.
res.send(302);
или же res.send(302, 'your response');