Экспресс поток промежуточного программного обеспечения - PullRequest
0 голосов
/ 03 ноября 2018

Рассмотрим следующее приложение Express:

const express = require('express')

const app = express()

app.use((req, res, next) => {
  console.log('\n\nALWAYS')
  next()
})

app.get('/a', (req, res) => {
  console.log('/a: route terminated')
  res.send('/a')
})

app.use((req, res) => {
  console.log('route not handled')
  res.send('404 - not found')
})

app.listen(3000, () => {
  console.log('listening on 3000')
})

Визит /a Результат консоли:

ALWAYS
/a: route terminated


ALWAYS
route not handled

Может кто-нибудь объяснить, почему существует другой журнал промежуточного программного обеспечения? Я ожидал только 2 строки консольного журнала. Вместо

ALWAYS
route not handled

зарегистрировано.

1 Ответ

0 голосов
/ 03 ноября 2018

Это очень распространенная точка замешательства. Вероятная причина в том, что вы пошли на /a в браузере, и браузер сделал два запроса. Один для /favicon.ico и один для /a (это то, что браузеры делают, когда вы переходите на новый сайт, для которого они ранее не кэшировали иконку - маленький глиф, который они отображают, который представляет веб-сайт в некоторых местах в браузере) .

Если вы зарегистрируете URL-адрес запроса в промежуточном программном обеспечении и в обработчике 404, вы увидите подробности происходящего:

const express = require('express')

const app = express()

app.use((req, res, next) => {

  console.log('\n\nRequest for: ', req.url);
  next();
})

app.get('/a', (req, res) => {
  console.log('/a: route terminated')
  res.send('/a')
})

app.use((req, res) => {
  console.log('route not handled for ', req.url);
  res.send('404 - not found');
});

app.listen(3000, () => {
  console.log('listening on 3000')
})
...