您好我正在尝试使用nodeJS,Socket.io,为我的聊天应用程序表达并且一直在尝试在stackoverflow上发现的几个方法,但是我的问题与我的相同但没有运气...每当我尝试加载php页面页面给我这个错误
错误:ENOENT,stat'D:\ site_deploy \ hsoft [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格式所以需要它。请帮忙
答案 0 :(得分:1)
您收到此错误,因为validator
是一个对象,而不是字符串。 Documentation表示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');
});
});
<强> 更新 强>
如果您希望节点提供静态文件(images,css,js),您还应添加static中间件。假设所有静态文件都在/public
目录中。在app.get
之前添加此行:
app.use('/public', require('express').static(__dirname + '/public'));