Como faço uma resposta diferida de um manipulador de ação do Node.js Express?
-
23-09-2019 - |
Pergunta
Usando Expressar (por Node.js) Como escrevo uma resposta após um retorno de chamada?
A seguir, é um exemplo mínimo. posix.cat
é uma função que retorna uma promessa, up
faz algo com o resultado, e eu quero enviar isso como resposta.
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);
O cliente nunca recebe uma resposta.
Eu também tentei variações sobre isso:
get('/2', function () {
var myRequest = this;
function up(s) {
myRequest.respond(s.toUpperCase());
}
return posix.cat('/etc/motd').addCallback(up);
});
Mas isso tende a travar tudo:
[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
Solução
De acordo com isto, o problema com a abordagem nº 2 que respond
foi chamado antes que um código de status fosse definido.
Isso funciona:
get('/2', function () {
var myRequest = this;
function up(s) {
myRequest.halt(200, s.toUpperCase());
}
return posix.cat('/etc/motd').addCallback(up);
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow