使用特殊文件路径为客户端提供节点模块的组件

时间:2012-01-16 05:37:16

标签: node.js

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

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

有没有向现有的http服务器添加请求处理程序,该服务器可以根据网址提供单个javascript?

我试过这个

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');

        }
    });
}

但它崩溃了节点,因为现有服务器也尝试发送自己的标头。

感谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我认为你不能实现这一点(在httpServer上附加2个请求处理程序),但我建议你采用不同的方法。

例如,将所有这些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
    }
  });
});

答案 2 :(得分:0)

对我有用的解决方案如下:

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!');
    }
  });
};

这比存储请求侦听器,替换它们,然后在需要时在循环中调用它们要简单得多。