0

こんにちは、チャットアプリケーション用にnodeJS、Socket.io、expressを試していましたが、スタックオーバーフローで見つかったいくつかのメソッドを試していて、私のものと同じ問題を抱えていましたが運がなかった..ページにアクセスすると、このエラーが表示されます

エラー: ENOENT、stat 'D:\site_deploy\hsoft[オブジェクト オブジェクト]'

ここに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形式であるため、php-nodeをphpインタープリターとして使用しています。助けてください

4

1 に答える 1

1

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');
  });
});

アップデート:

ノードに静的ファイル (画像、css、js) を提供させたい場合は、静的ミドルウェアも追加する必要があります。すべての静的ファイルが/publicディレクトリにあるとします。の前に次の行を追加しますapp.get

app.use('/public', require('express').static(__dirname + '/public'));
于 2014-07-31T17:38:57.897 に答える