Как мне выполнить отложенный ответ от node.js обработчика экспресс-действий?

StackOverflow https://stackoverflow.com/questions/2159559

  •  23-09-2019
  •  | 
  •  

Вопрос

Используя Выражать (для node.js) Как мне написать ответ после обратного вызова?

Ниже приведен минимальный пример. posix.cat это функция, которая возвращает обещание, up делает что-то с результатом, и я хочу отправить это в качестве ответа.

require.paths.unshift('lib');
require('express');
var posix = require('posix');

get('/', function () {
    function up(s) {
        return s.toUpperCase();
    }
    return posix.cat('/etc/motd').addCallback(up);
});

run(3001);

Клиент никогда не получает ответа.

Я также пробовал вариации на этот счет:

get('/2', function () {
    var myRequest = this;
    function up(s) {
        myRequest.respond(s.toUpperCase());
    }
    return posix.cat('/etc/motd').addCallback(up);
});

но это, как правило, приводит к краху всего:

[object Object].emitSuccess (node.js:283:15)
[object Object].<anonymous> (node.js:695:21)
[object Object].emitSuccess (node.js:283:15)
node.js:552:29
node.js:1027:1
node.js:1031:1
Это было полезно?

Решение

Согласно это, проблема с подходом №2 в том , что respond был вызван до того, как был установлен код состояния.

Это работает:

get('/2', function () {
    var myRequest = this;
    function up(s) {
        myRequest.halt(200, s.toUpperCase());
    }
    return posix.cat('/etc/motd').addCallback(up);
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top