NodeJS Error: ENOENT, stat 'D:\site_deploy\hsoft\[object Object]'



嗨,我正在尝试nodeJS, Socket。Io,表达了我的聊天应用程序,并被困在一个错误上,一直在尝试在stackoverflow上发现的几个方法,他有和我一样的问题,但没有运气。当我试图加载php页面时页面会显示这个错误

错误:enent, stat 'D:site_deployhsoft[object object]'

这里是index.js

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var spawn = require('child_process').spawn;
var validator = spawn('php', ['message.php']);
app.get('/', function(req, res){
  res.sendfile(__dirname + '/' +validator);
});
io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    console.log('message: ' + msg);
  });
});
io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    io.emit('chat message', msg);
  });
});
http.listen(3000, function(){
  console.log('listening on *:3000');
});

我使用php-node作为我的php解释器,这是需要的,因为我的设计模板是在php格式。请帮助

您得到这个错误,因为validator是一个对象,而不是字符串。文档说明spawn返回一个ChildProcess object,您应该使用它来获得命令的输出。

您可以使用这个简单的函数来获得输出:

function getStdout(command, args, fn) {
    var childProcess = require('child_process').spawn(command, args);
    var output = '';
    childProcess.stdout.setEncoding('utf8');
    childProcess.stdout.on('data', function(data) {
        output += data;
    });
    childProcess.on('close', function() {
        fn(output);
    });
}

然后在你的代码中使用它:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var validator;
app.get('/', function(req, res){
  //res.sendfile(__dirname + '/' +validator);
  res.send(validator);
});
//you should have only one io.on('connection')
io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    console.log('message: ' + msg);
  });
});
getStdout('php', ['message.php'], function(output) {
  validator = output;
  //start your server after you get an output
  http.listen(3000, function(){
    console.log('listening on *:3000');
  });
});

更新:

如果你想让node提供静态文件(图片,css, js),你还应该添加静态中间件。假设所有静态文件都在/public目录中。在app.get:

之前添加这一行
app.use('/public', require('express').static(__dirname + '/public'));

最新更新