【问题标题】:How do I do a deferred response from a node.js express action handler?如何从 node.js 快速操作处理程序中进行延迟响应?
【发布时间】:2011-01-10 16:49:19
【问题描述】:

使用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

【问题讨论】:

  • 警告:此示例中引用的 API 现已过时。

标签: javascript node.js promise


【解决方案1】:

根据this,方法#2 的问题是在设置状态码之前调用respond

这行得通:

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

【讨论】:

    猜你喜欢
    • 2017-03-26
    • 2012-08-27
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    相关资源
    最近更新 更多