我正在为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,则它会调用数组中的侦听器。但是,据我所知,这在上面显示的第二个例子中不起作用。
这是最好的方法吗?
答案 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。