回调函数中的response.write

时间:2014-06-04 08:44:40

标签: javascript node.js

我是NodeJS的新手并且关注本书(http://www.nodebeginner.org/)。

此代码来自该书,此函数未列出当前目录中应该发生的文件。

var exec = require("child_process").exec;

function start(response){
    console.log("Request handler 'start' was called.");

    exec("ls -lah",function(error,stdout,stderr){
        response.writeHead(200,{"Content-Type":"text/plain"});
        response.write(stdout);
        response.end();
   });

}

然后我更改了代码以打印response.write函数的返回值,如下所示。当我运行它时,在命令行上打印“true”。那是返回值是“true”。

function start(response){
    console.log("Request handler 'start' was called.");

    exec("ls -lah",function(error,stdout,stderr){
        response.writeHead(200,{"Content-Type":"text/plain"});
        console.log(response.write(stdout));
        response.end();
   });

}

有谁可以解释原因?

谢谢。

3 个答案:

答案 0 :(得分:0)

基本上你打印出表达式 response.write(stdout)

返回的值

答案 1 :(得分:0)

console.log(response.write(stdout));

当然,您只看到了true,因为response.write在内部写入连接到套接字的文件描述符。如果你只是调用response.write,你应该看到你的数据。

答案 2 :(得分:0)

您的问题只是您尝试在Windows的PowerShell上执行ls -lah

Powershell的列出文件的命令是dir,因此您的代码将如下所示:

var exec = require("child_process").exec;

function start(response){
    console.log("Request handler 'start' was called.");

    exec("dir",function(error,stdout,stderr){ //<== dir instead of ls
        response.writeHead(200,{"Content-Type":"text/plain"});
        response.write(stdout);
        response.end();
   });

}

编辑Tavion Potter的要求:

检查文件中是否没有其他response.end(),node.js是异步的,你可以在其他地方结束响应。