我是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();
});
}
有谁可以解释原因?
谢谢。
答案 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是异步的,你可以在其他地方结束响应。