node.js - 将res.send()移到函数之外?

时间:2016-01-18 10:35:48

标签: javascript node.js

目前我所拥有的是:

var server = http.createServer(function(req,res){
    res.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'});
    var oo = require('/test.js');
    oo(connection, function (e, result) {
        res.end(result);
    });
}).listen(80);

我想做的是

var server=http.createServer(function(req,res){
    res.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'});
    var oo = require('/test.js');
    oo(connection, function (e, result) {});
    res.end(result);
}).listen(80);

但这不起作用。

想法是移动

res.end(result);

正上方

}).listen(80);

2 个答案:

答案 0 :(得分:0)

我不知道你为什么要这样做,请阅读about async and sync code不是最好的文章,但你可以找到很多,但我有一个解决方案。

在开始之前,请安装Fibers package

npm install fibers

解决方案:

var Future = require('fibers/future');
var server = http.createServer(function(req,res){
   fut = new Future();
   res.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'});
   var oo = require('/test.js');
   oo(connection, function (e, result) {
      fut.return(result);
   });
   res.end(fut.wait());

}).listen(80);

请阅读JS Conventions

答案 1 :(得分:0)

它不能移动到回调函数之外,因为在这种情况下它会在回调之前执行,我想这会产生一个输出到res。由于您之前关闭了res,因此无法发送此结果。