我可以在subprocess中定义快速路由吗?

所以我运行了一堆写在节点上的聊天机器人,没什么太刺激的。 不过,我最近决定给他们自己的小网页以graphics方式显示信息。 要做到这一点,我想我只是运行快递。

然而,我用一个包装文件来运行我的机器人,它将每个chatbot作为一个subprocess启动。 这使得使用expression有点棘手。 目前,我在wrapper.js文件中启动Express服务器,如下所示:

 var express = require("express"); var web = express(); web.listen(3001); 

然后在subprocess中,我这样做:

 var express = require("express"); var web = express(); web.get("/urlforbot",function (req,res) { res.send("Working!"); }); 

但是,当我导航到:3001/urlforbot ,我得到Cannot GET /urlforbot

任何想法我做错了,如何解决这个问题?

编辑 :这是我完整的包装文件: http : //snippi.com/s/3vn56m2

编辑2 :这是我现在正在做的。 我将每个机器人托pipe在自己的端口上,并将这些信息存储在configuration中。 这是我正在使用的代码,它似乎工作:

 web.get("/"+cfg.route, function (req,res) { // forward the data res.redirect('http://url.com:'+cfg.port+"/"+cfg.route); }); 

既然你的机器人作为单独的进程运行(任何特定的原因?),你必须把每个人都必须使用Express来实现他们自己的HTTP服务器:

 var express = require("express"); var web = express(); web.get("/urlforbot",function (req,res) { res.send("Working!"); }); web.listen(UNIQUE_PORT_NUMBER); 

每个bot程序需要监听一个唯一的端口号,它不能共享。

接下来,您需要将“主”进程中端口3001上的请求映射到正确的subprocess“Express”服务器。

node-http-proxy有一个名为ProxyTable的有用选项,用来创build这样的映射,但是它需要主进程知道每个bot的端点( /urlforbot )。 它还要求主人知道机器人在哪个端口上侦听。

编辑:或者,您可以使用child_process.fork为每个机器人分叉一个新进程,并使用它们和主进程(端口号等,甚至是生成/urlforbot页面所需的所有数据)进行通信通信节点提供,但这仍然听起来像一个非常复杂的设置。

难道不能创build一个Bot类吗? 您将为要运行的每个bot实例化类,并且该实例加载其特定configuration并将其路由添加到Express服务器。 全部来自相同的过程。