Node + Express многократно запускает / зацикливает запросы, хотя результат был отправлен - PullRequest
0 голосов
/ 24 мая 2018

Я перепробовал почти все, и теперь мой разум наконец сдался.Следовательно, я здесь спрашиваю направления.Как, черт возьми, этот простой кусок кода (назовем его app.js):

var express = require('express');
var app = express();

app.use(function(req, res) {
  console.log('Request made')
  res.send('Hello World!');
});

app.listen(3000, function() {
  console.log('Example app listening on port 3000!');
});

При запуске как node app.js может привести к следующему результату в моем терминале, учитывая тот факт, что я тольконажмите localhost:3000 один раз :

Example app listening on port 3000!
Request made
Request made
Request made
Request made
Request made
Request made
Request made
...continues...

По какой-то причине я получаю повторение запроса снова и снова, хотя запрос выполнен и доставлен в браузер.

То же самое верно, если я использую app.get('*', function(req, res) { ... }) вместо app.use(function(req, res) { ... }).

Если я обращаюсь к чему-то более конкретному, например app.get('/', function(req, res) { ... }), повторение прекращается, и я получаю one «Запрос выполнен», как и ожидалось.Однако мне нужно сопоставить все входящие запросы - в моем приложении я делаю что-то более сложное, чем ведение журнала «Запрос выполнен»:)

Есть идеи?Спасибо!

Узел: 8.11.2 Экспресс: 4.16.3

1 Ответ

0 голосов
/ 25 мая 2018

Вам нужно что-то сделать, а затем передать результаты следующему обратному вызову вместо отправки ответа, который делает его рекурсивным, поскольку он перехватывает ответ и затем делает то же самое, вызывая цикл.

// this middleware will not allow the request to go beyond it
app.use(function(req, res, next) {
 res.send('Hello World');
});

// requests will never reach this route
app.get('/', function (req, res) {
  res.send('Welcome');
});

Вам нужнодля вызова next() для вызова промежуточного программного обеспечения

app.get('/', function (req, res, next) {
  try {
      // do something and return result
      res.send('Welcome');
  } catch(e) {
      next(e)
  }

});

app.use(function (err, req, res, next) {
  console.log('Error occurred')
  res.status(err.statusCode).send(err.message);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...