2010-01-29 1 views
1

Использование Express (for node.js) Как написать ответ после обратного вызова?Как сделать отложенный ответ от обработчика action.js express?

Ниже приведен минимальный пример. 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

Предупреждение: API, указанные в данном примере является устаревшим. – keturn

ответ

0

Согласно this, проблема с подходом # 2, что respond называли перед был установлен код состояния.

Это работает:

get('/2', function() { 
    var myRequest = this; 
    function up(s) { 
     myRequest.halt(200, s.toUpperCase()); 
    } 
    return posix.cat('/etc/motd').addCallback(up); 
}); 
Смежные вопросы