【发布时间】:2016-01-29 18:09:40
【问题描述】:
我有节点应用程序,它完成了生成(子进程)到应用程序, 应用程序有主机和端口:
var exec = require('child_process').spawn;
var child = exec('start app');
console.log("Child Proc ID " + child.pid)
child.stdout.on('data', function(data) {
console.log('stdout: ' + data);
});
child.stderr.on('data', function(data) {
console.log('stdout: ' + data);
});
child.on('close', function(code) {
console.log('closing code: ' + code);
});
一些应用程序将立即启动,而一些应用程序将需要一些时间 10 - 20 秒才能启动。
现在我使用节点 http 代理来运行应用程序,问题是当用户想要在应用程序启动和运行之前运行应用程序时出现错误。 知道如何解决这个问题吗?
proxy.on('error', function (err, req, res) {
res.end('Cannot run app');
});
顺便说一句,由于我们框架的限制,我无法在代理错误中发送响应 500。任何其他想法我如何跟踪应用程序可能有一些超时以查看它发送响应 200 的天气。
更新 - 我的逻辑示例
httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});
http.createServer(function (req, res) {
console.log("App proxy new port is: " + 5000)
res.end("Request received on " + 5000);
}).listen(5000);
function proxyRequest(req, res) {
var hostname = req.headers.host.split(":")[0];
proxy.web(req, res, {
target: 'http://' + hostname + ':' + 5000
});
proxy.on('error', function (err, req, res) {
res.end('Cannot run app');
});
}
【问题讨论】:
-
你提到你有框架限制——你能说得更详细些吗?如果我们不知道我们能做什么和不能做什么,就很难知道您可以使用什么样的解决方案。您是否可以控制正在生成的子进程?
-
如果发送了请求但应用程序尚不可用,您预计会发生什么?
标签: javascript node.js child-process spawn node-http-proxy