Comment puis-je faire une réponse différée d'un gestionnaire d'action express Node.js?

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

  •  23-09-2019
  •  | 
  •  

Question

Utilisation Exprimez-(pour Node.js ) Comment puis-je écrire une réponse après un rappel?

Ce qui suit est un exemple minimal. posix.cat est une fonction qui renvoie une promesse, up fait quelque chose au résultat, et je veux l'envoyer comme réponse.

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);

Le client obtient jamais une réponse.

J'ai aussi essayé des variations sur ceci:

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

mais qui tend à tout bloquer:

[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
Était-ce utile?

La solution

Selon cette , le problème avec l'approche # 2 qui était respond appelé avant un code d'état a été défini.

Cela fonctionne:

get('/2', function () {
    var myRequest = this;
    function up(s) {
        myRequest.halt(200, s.toUpperCase());
    }
    return posix.cat('/etc/motd').addCallback(up);
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top