3

这是针对初学者的节点教程。为什么我的代码不起作用?它与他的相同,我尝试了解决方法但没有成功。如果可以的话请帮忙。

http://nodetuts.com/tutorials/2-webtail-nodejs-child-processes-and-http-chunked-encoding.html#video

在本教程中,他将一个日志/文本文件写入位于 localhost:4000 的网页中,之前的示例可以正常工作(教程 1),但是我根本无法让它做任何事情,它可以运行,仅此而已。

任何人都可以得到这个打印文件到网页。:) 谢谢!

var http = require('http');
var spawn  = require('child_process').spawn;

http.createServer(function(request, response){

    response.writeHead(200, {
        'Content-Type' : 'text/plain'
    });

    var tail_child = spawn('tail', ['-f', '/var/log/system.log']);

    request.connection.on('end', function(){
        tail_child.kill();
    });

    tail_child.stdout.on('data', function(data){
        console.log(data.toString());
        response.write(data);
    });

}).listen(4000);

我尝试了以下方法,它们没有任何区别:

    console.log(data.toString());
    response.write(data);
    response.end();

    console.log(data.toString());
    response.end(data);

MiguelSanchezGonzalez回答后编辑:

我添加tail_child.stderr.pipe(process.stdout);到正确的位置,这是我得到的回应:

CreateProcessW: The system cannot find the file specified.

这里确实存在一个文件,我还测试了许多不同的路径,包括与脚本位于同一文件夹中的文本文件('/test.txt'例如。所以也许我错了,我只是假设当它说文件时它在谈论我的文件。


编辑2:我还检查了路径是否存在(从这里粗略构建):检查NodeJs中是否存在文件的最快方法,它确实说该文件确实存在。

这段代码:

var file = path.normalize = ('var/log/system.log');

    fs.exists(file, function(exists){
        util.debug(exists ? "yep, its there":"nope");
    });

    console.log(file);

输出这个:

var/log/system.log
DEBUG: yep, its there
4

2 回答 2

2

好的,我对此很陌生,它表明,感谢大家帮助我,我现在找到了原因。我很愚蠢,没有提到我在 Windows 上,我认为这无关紧要,因为我不知道这段代码正在对另一个程序进行外部调用。

是的,我知道,愚蠢的乔,我认为 tail 只是节点中的一个命令,并且没有正确思考。现在这个混乱是有道理的。

var tail_child = spawn('C:/cygwin/bin/tail.exe', ['-f', 'var/log/system.log']);

这修复了所有问题,安装 cygwin 并硬链接该二进制文件!我猜这段代码是为 linux/unix 环境设计的,所以我们只需要凑合着做。

我正在和 nodetuts 的作者 (Pedro) 交谈,我提到我在一个 windows 盒子上,Bam 这一切都说得通,代码现在对我来说也更有意义了(我在节点文档上搜索年龄-f并且不能'找不到很多。哈哈)

我应该把 windows 放在我的环境描述中。

那好吧。

傻乔。

于 2012-07-02T15:52:20.093 回答
1

你好约瑟夫,我建议你在你的代码中更改这一行,看看你有什么样的错误

http.createServer(function(request, response){

    response.writeHead(200, {
        'Content-Type' : 'text/plain'
    });

    var tail_child = spawn('tail', ['-f', '/var/log/system.log']);

    request.connection.on('end', function(){
        tail_child.kill();
    });

    tail_child.stdout.on('data', function(data){
        console.log(data.toString());
        response.write(data);
    });

    /* Add this line to see the error in your terminal */
    tail_child.stderr.pipe(process.stdout);

}).listen(4000);

这将向您显示错误的描述,也许您的文件系统中没有此文件或者您无法打开它,请尝试将路径文件更改为您知道存在并且可以打开它的其他文件。

于 2012-07-01T21:56:27.473 回答