我正在学习节点JS,并希望创建一个非常基本的单一用途的web服务运行服务器上的一个windows命令(在ejabberd聊天服务器中创建一个新用户),客户端可以向该命令传递一个特定的参数(我想使用ajax)。
我一直在使用基本的"createServer"教程作为模板:
var sys = require('util')
var http = require('http');
var exec = require('child_process').exec;
var path = '"C:\Program Files\ejabberd-2.1.8\bin\ejabberdctl"';
http.createServer(function (req, res) {
var cmd = path + ' register nodeuser ejabberhost xxxxxx';
var child = exec(cmd, function (error, stdout, stderr) {
var msg;
if (error !== null) {
msg = 'Error : ' + error;
}
else{
msg = stdout;
}
// this will prob be JSON
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(msg);
});
}).listen(1337, "localhost");
console.log('Server running at http://localhost:1337/');
在上面的代码中,'nodeuser'需要替换为在请求中使用ajax从客户端传递的参数。我该如何调整这段代码来实现这一点呢?
先不考虑输入卫生问题,下面是如何做到这一点的:
http.createServer(function (req, res) {
var dataInput;
if (req.url === '/foo') {
req.on('data', function (chunk) {
dataInput = chunk.toString();
})
}
if (dataInput !== undefined) {
var cmd = path + ' register nodeuser ejabberhost ' + dataInput;
}
...