node JS экспресс-фреймворк sendFile(home.html,{контекст?})

Я читаю документы по фреймворку Express, создавая свои основные маршруты входа/перенаправления страниц. Следующий маршрут принимает отправку:

app.post('/',function(req,res){
//console.log("USERNAME: "+req.body.username);
//console.log("PASSWORD: "+req.body.password);
res.redirect('/chat');
});

и это:

app.get('/chat', function(req, res){
    res.sendFile(__dirname + '/templates/chat.html');
    //console.log("request");
});

переводит пользователя на новую страницу. Как отправить контекст? Должен ли я использовать res.render()? Ни одна из функций не содержит опции для таких данных, как {username:req.body.username}. Как должны передаваться данные между маршрутами?


person CuriousGeorgre    schedule 20.03.2018    source источник
comment
Что вы имеете в виду, отправить контекст? Вы можете использовать сеанс на стороне сервера (см. Экспресс-сеанс) или вы можете установить файл cookie и поместить некоторые данные в файл cookie, если вы хотите добавить какое-либо состояние к запросам данного браузера.   -  person jfriend00    schedule 20.03.2018
comment
Для временного состояния только следующего запроса вы также можете перенаправить на URL-адрес, содержащий параметры запроса.   -  person jfriend00    schedule 20.03.2018


Ответы (1)


Как правило, для обработки входов в систему с экспресс-вызовом вы должны использовать что-то вроде локальной стратегии паспорта, которая прикрепляет пользователя объект к объекту запроса (req.user) для вас для каждого маршрута. Я не знаю, сработает ли то, что вы пытаетесь, в более широком контексте — вам понадобится какое-то промежуточное программное обеспечение на основе сеанса, например express-session, по крайней мере, так что вы можете прикреплять переменные для каждой сессии (я думаю, это дает вам req.session). По умолчанию экспресс имеет возможность хранить информацию для одного цикла запроса/ответа (res.locals) или для всего экземпляра приложения (т. е. для всех пользователей) (app.locals< /а>).

Что касается получения данных в представлениях, вы должны использовать res.render с чем-то вроде EJS, мопса или другого механизма представления. Например, если в вашем маршруте у вас было что-то вроде:

route.get('/', (req, res) => {
  res.render('template', { username: 'yourname' })
}

вы можете ссылаться на это в своем шаблоне ejs следующим образом:

<h1>Hello, <%= username %>!</h1>

который будет отправлен обратно как это:

<h1>Hello, yourname!</h1>

Итак, чтобы ответить на ваш вопрос:

  • Вы бы использовали res.render для получения переменных и данных в ваших представлениях.
  • Вы не обмениваетесь данными между маршрутами по умолчанию, за исключением данных на уровне приложения, которые применяются ко всем пользователям, которые можно настроить на app.locals.
  • Вы можете использовать промежуточное ПО аутентификации, такое как паспорт, и промежуточное ПО сеанса, например экспресс-сессию, чтобы отслеживать информацию о пользователях по маршрутам за сеанс.

Надеюсь это поможет! Удачи с экспрессом!

person JSilv    schedule 20.03.2018