代码之家  ›  专栏  ›  技术社区  ›  keturn

如何从node.js express操作处理程序执行延迟响应?

  •  1
  • keturn  · 技术社区  · 15 年前

    使用 Express (用于 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
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   keturn    15 年前

    根据 this 方法的问题 respond 在设置状态代码之前调用。

    这工作:

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