Node.js 为什么每次POST请求都会多次触发shell命令,而不是一次。我正在使用nodejs和简单的ssh节点模块
如何使用简单的ssh节点模块,对来自express服务器的每个POST请求只调用一次shell脚本。 注意:在我的第一次POST请求中,脚本/命令执行一次,但在后续请求中,命令执行多次。这种行为的原因是什么Node.js 为什么每次POST请求都会多次触发shell命令,而不是一次。我正在使用nodejs和简单的ssh节点模块,node.js,express,ssh,Node.js,Express,Ssh,如何使用简单的ssh节点模块,对来自express服务器的每个POST请求只调用一次shell脚本。 注意:在我的第一次POST请求中,脚本/命令执行一次,但在后续请求中,命令执行多次。这种行为的原因是什么 // Snippet that executed once I sent a POST request router.post('/testScript', function (req, res, next) { res.json({ 'some json': '
// Snippet that executed once I sent a POST request
router.post('/testScript', function (req, res, next) {
res.json({
'some json': 'To be send'
})
next()
}, function (req, res) {
ssh.exec('echo $PATH', {
out: function(stdout) {
console.log(stdout);
}
}).start();
})
我的控制台中的结果是:
POST /unixscripts/testScript 200 69.202 ms - 34
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
请参见,POST请求触发一次,但脚本执行多次。为什么?
每次发送POST请求时的预期输出:
POST /unixscripts/testScript 200 69.202 ms - 34
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
simple ssh
模块似乎存在问题,其中在循环中使用回调时会多次触发。这在github问题中得到了承认。此外,该模块目前似乎没有得到积极开发
虽然我不知道为什么会发生这种情况,但在simple ssh
的情况下,exec
函数会向堆栈添加一个命令。由于您使用的是公共ssh
connection对象,因此在下一次调用时,堆栈中仍然存在旧的命令。然后,start
函数执行整个堆栈
模块内部使用较旧版本的ssh2
模块。您可以在案例中直接使用此模块
npm安装ssh2
var Client = require('ssh2').Client;
router.post('/script', function (req, res, next) {
res.json({
'some json': 'To be send'
})
next()
}, function (req, res) {
var conn = new Client();
conn.on('ready', function () {
conn.exec('echo $PATH', function (err, stream) {
if (err) throw err;
stream.on('data', function (data) {
console.log('STDOUT: ' + data);
}).on('close', function (code, signal) {
conn.end();
})
});
}).connect({
host: 'localhost',
username: 'user',
password: 'password'
});
})
感谢Stephen,代码与ssh2模块的预期工作一致。虽然我不知道为什么,因为简单ssh在后端使用ssh2。你能解释一下你的解决方案为什么有效吗?我已经用我对这个问题的看法更新了答案。我没有使用过
simple ssh
模块,因此如果不查看源代码,我无法确定。尽管在我的许多项目中,我使用了ssh2
。