当浏览器中的用户单击按钮时,我需要运行服务器端脚本...
我已经研究了一段时间,无法弄清楚。
我们有什么:
- 在 Fedora Red Hat 上运行的 Node.js 服务器(在 localhost 上)
- 没有 PHP
- 大多数页面是 html + javascript + jQuery
更清楚地说,这是我们希望发生的事情:
--> 用户访问 http://localhost/index.html
--> 用户选择颜色,按下“提交”按钮。
--> 选择的颜色进入 bash 脚本(在服务器上) ./sendColors [listOfColors]
--> bash 脚本就是这样做的。
=================
我尝试过的事情
child_process.spawn
我希望我可以在 html 页面上执行此操作:
var spawn = require('child_process').spawn;
ls = spawn(commandLine, [listOfColors]);
ls.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
ls.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
ls.on('close', function (code) {
console.log('child process exited with code ' + code);
});
但是这个脚本是服务器端的,而不是客户端的,所以我不能在 html 页面上运行它(我相信)。当我尝试运行它时得到的错误是 require 是未定义的。
浏览器化
我试过 installinst browserify,但是我们使用的机器没有连接到互联网,并且无法使用 npm install。我已经手动将文件复制到 usr/lib 并“需要”它很好,但后来它说它找不到需要“通过”,它在 browserify 的 index.js 中......
获取运行时
试过这个东西:
var bash_exit_code = 0; // global to provide exit code from bash shell invocation
function bash(command)
{
var c; // a character of the shell's stdout stream
var retval = ""; // the return value is the stdout of the shell
var rt = Runtime.getRuntime(); // get current runTime object
var shell = rt.exec("bash -c '" + command + "'"); // start the shell
var shellIn = shell.getInputStream(); // this captures the output from the command
while ((c = shellIn.read()) != -1) // loop to capture shell's stdout
{
retval += String.fromCharCode(c); // one character at a time
}
bash_exit_code = shell.waitFor(); // wait for the shell to finish and get the return code
shellIn.close(); // close the shell's output stream
return retval;
}
说它不知道 Runtime 是什么
要求JS
我研究了 RequireJS,但不明白如何在我的情况下使用它
评估
我也试过 eval ......但我认为那是代数表达式......没有用。
活动X
甚至尝试过activeX:
variable=new ActiveXObject(...
说它不知道 ActiveXObject 是什么
=================
目前我正在尝试
HttpServer.js:
var http = require('http');
...
var colors = require('./colorsRequest.js').Request;
...
http.get('http://localhost/colorsRequest', function(req, res){
// run your request.js script
// when index.html makes the ajax call to www.yoursite.com/request, this runs
// you can also require your request.js as a module (above) and call on that:
res.send(colors.getList()); // try res.json() if getList() returns an object or array
console.log("Got response ");// + res.statusCode);
});
颜色请求.js
var RequestClass = function() {
console.log("HELLO");
};
// now expose with module.exports:
exports.Request = RequestClass;
索引.html
...
var colorsList = ...
...
$.get('http://localhost/colorsRequest', function(colors) {
$('#response').html(colorsList); // show the list
});
我越来越
GET http://localhost/colorsRequest 404 (Not Found)
有人有什么想法吗?