用一个特殊的文件path为我的节点模块提供一个客户端组件

我正在构build一个NodeJS游戏引擎。 当用户创build引擎的实例时,他们必须通过一个现有的http服务器。 引擎然后附加一个套接字服务器来更新客户端视图。

我想要做的是在一个特殊的url上提供一个JavaScript文件,这个文件可以连接客户端,并且允许引擎设置自己的套接字,并为网页提供一个视口和控制绑定API。

有没有办法添加一个请求处理程序到一个现有的http服务器,可以提供一个单一的JavaScript的基础上的url?

我已经试过了

function bindCoreFileServe(httpServer) { //create a server httpServer.on('request', function(req, res) { //check the url if(req.url === '/SliverJet.js') { //send the datafunction (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); } }); } 

但是它会使节点崩溃,因为现有的服务器也会尝试发送自己的头文件。

谢谢。

我通过socket.io的来源得知了这一点。 本质上,我将所有的事件监听器从httpServer中分离出来,并将它们存储在一个数组中,然后将自己的监听器绑定到它。 如果URL不属于我,我执行所有的分离的事件监听器与他们的调用方法传递给httpServer作为范围。

我不认为你可以做到这一点(在httpServer上附加2个请求处理程序),但我build议你采取不同的方法。

例如,将所有这些URL存储到数据库中,并使用通配符来检查它们,就像这样(这是Express的,但你明白了):

 app.get('/:db_url', function(req, res) { get_url_from_database(req.params.db_url, function (url, error) { if (error) { throw error; } else { // do things } }); }); 

为我工作的解决scheme如下所示:

 function bindFileCoreServer (httpServer) { httpServer.addListener('request', function (req, res) { if (req.url === '/SliverJet.js') { res.writeHead(200, {'Content-Type': 'text/javascript'}); res.end('//Hello world!'); } }); }; 

这比存储请求监听器更简单,replace它们,然后在需要时循环调用它们。