Как мне выполнить отложенный ответ от node.js обработчика экспресс-действий?
-
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);
});
Не связан с StackOverflow