我有一个express server
在pm2
下运行,只有一条路线:
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html);
}
和一个socket.io事件处理程序,该事件处理程序侦听“打开的youtube”(来自先前发送的index.html
)
io.on('connection', function(socket){
socket.on('open youtube', function() {
exec('start chrome youtube.com'); //yes ik, this is a windows-only solution
console.log('Opening youtube...');
});
});
虽然一切正常,但在快递服务器上处理了辐射后,唯一起作用的部分是console.log()
而不是exec()
(const exec = require('child_process').exec;
)
pm2
不允许我运行cmd
命令的原因是什么,和/或如何从cmd
下运行的nodejs
应用程序运行pm2
命令是什么原因? 1}}?
编辑:
当我使用npm start而不是pm2进程运行服务器时,它将通过youtube.com打开一个新标签页(如预期的那样)
编辑2:
由于某种原因,我运行pm2 reload生态系统.config.js和pm2保存后,它确实起作用了。我对ecosystem.config.js所做的唯一更改是将exec_mode更改为exec_mode:'cluster'而不是默认值fork
。
我不知道这是不是原因。
答案 0 :(得分:1)
exec(String)是一个异步函数, 您可能有一个自己不知道的错误,请传递这样的回调:
exec('start chrome youtube.com', (error, stdout, stderr) => {
if (error) {
// handle error
} else {
// handle success
}
});
您还可以使用同步版本
try {
let res = execSync('start chrome youtube.com');
} catch(err){
// handle error
return;
}
// handle success