Подтвердить что ты не робот

Перенаправление клиента с помощью NodeJS и Resify

Я создаю сервер REST для SPA с 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?

4b9b3361

Ответ 1

Восстановить интерфейс ответа теперь имеет метод 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 to Restify, а основные отличия API сначала (в Restify):

  • server.use предназначен только для промежуточного программного обеспечения path и HTTP-method-agnostic.
  • res.redirect требует, чтобы вы проходили next
  • Некоторые элементы или интерфейс запроса являются методами, а не значениями, например req.path. req.path является псевдонимом req.getPath в Restify

Я НЕ говорю, что под капотом они похожи, но что три основные вещи являются основными препятствиями для переноса над плагинами Express. Under-the-hood, у Restify есть много преимуществ перед Express в моем опыте использования его как в крупных корпоративных приложениях, так и в личных проектах.

Ответ 2

Вам нужно использовать код статуса перенаправления 302.

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