Перенаправление клиента с 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');

Другие вопросы по тегам