Узел асинхронного кода маршрута

Я использую узел с экспресс 4.0. Я не могу найти что-либо в Интернете (включая документы) о внедрении асинхронного кода в маршрут.

С промежуточным ПО это довольно просто:

app.use('/something', function (req, res, next)
{
  doSomethingAsync(function(err, probablySomethingElse)
  {
    // probably some error checking
    next();
  });
});

Проблема с маршрутами в том, что нет обратного вызова next, так как же Express узнает, когда перейти к следующему заданию? /р>

app.get('/something', function (req, res)
{
  res.render('someTemplate');
  // no next() here, but it still works
});

Если бы мне пришлось угадывать, я бы сказал, что экспресс переходит к следующей задаче сразу после выхода из вышеуказанной функции. Но из любопытства я запустил следующий код ...

app.get('/something', function (req, res, next)
{
  console.log(next);
});

... и на самом деле передан обратный вызов next. Так что здесь происходит? Как это работает за кулисами? И как я могу поместить асинхронный код там?

7 голосов | спросил Sebastian Nowak 27 J000000Sunday14 2014, 16:33:03

1 ответ


0

Express будет ждать, пока вы не вызовете res.render, чтобы закрыть сокет. Это означает, что вы можете передать res.render в обратный вызов, выполнение которого занимает X секунд, и все будет работать.

next позволяет вам перейти к следующему маршруту, который отображает ваше значение, вы можете найти очень хорошее объяснение здесь: Для чего используется параметр «next» в Express?

Но по тому, что вы спрашиваете здесь. Момент render() вызывается для res объект, затем данные будут отправлены и сокет закрыт.

ответил fmsf 27 J000000Sunday14 2014, 16:59:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132