Node.js库如何在特定URL路径上注册HTTP请求?

时间:2011-03-24 08:09:40

标签: javascript web-services node.js

我正在为Node.js中的Web服务编写一个库。我的库需要处理具有特定URL前缀的所有HTTP请求(例如,/ _docs /*).

我希望人们能够在不改变代码的情况下使用我的库。

API应如下所示:

server = http.createServer(function(req, res) { ... });    
...
myLibrary.listen(server, '_docs/');

server = new http.Server();
myLibrary.listen(server, '_docs/');
server.on('request', function(req, res) { ... });

如果我只是在服务器对象上注册另一个事件处理程序,那么也将在所有HTTP请求上调用用户的http请求处理程序。我的代码将与用户的404处理程序竞争。

Socket.io有类似的问题,they solve it通过使他们的.listen()函数将所有现有的http请求处理程序移动到私有数组中。当HTTP请求进入时,如果他们的代码不处理URL,则它会调用数组中的侦听器。但是,据我所知,这在上面显示的第二个例子中不起作用。

这是最好的方法吗?

1 个答案:

答案 0 :(得分:3)

Connect怎么样?路由器中间件提供丰富的Sinatra / Express - 就像路由一样。

示例

connect.router(function(app){
  app.get('/user/:id', function(req, res, next){
    // populates req.params.id
  });
  app.put('/user/:id', function(req, res, next){
    // populates req.params.id
  });
})

如需高级用途,请查看http://expressjs.com/guide.html#routing