簡體   English   中英

NodeJS錯誤:ENOENT,狀態為'D:\\ site_deploy \\ hsoft \\ [object Object]'

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

嗨,我正在嘗試為我的聊天應用程序嘗試nodeJS,Socket.io,express並陷入錯誤,一直嘗試嘗試在stackoverflow上發現的幾種方法,這些方法與我的問題相同,但沒有運氣..每當我嘗試加載php時頁面它頁面給我這個錯誤

錯誤:ENOENT,狀態為“ 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格式的。 請幫忙

您收到此錯誤,因為validator是一個對象,而不是字符串。 文檔spawn返回一個ChildProcess object ,您應該使用該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'));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM