2013-03-22 41 views
4

我正在模仿另一个API。我也想提供一个不同的(更好的恕我直言)api。快递,多条相同功能的路线

// this is url I need to support 
api.post('/books/updateBook', function(req, res) { 
... 
}); 

// Would also like to support 
api.put('/books/:bookId', function(req, res) { 
... 
}); 

我可以很容易做到:

var updateBook = function(req, res) { 
... 
} 

// this is url I need to support 
api.post('/books/updateBook', updateBook); 

// Would also like to support 
api.put('/books/:bookId', updateBook); 

完全可以接受的吧?作为新来表达我想知道是否有更快速的方式来处理这个问题。我知道你可以使用正则表达式,但我不确定你可以将正则表达式映射到不同的HTTP动词(POST vs PUT)。

想法?

+0

您可能可以将这两条路线转换为一个正则表达式。 – Blender 2013-03-22 02:51:47

回答

5
api.all('/books/:bookId', function (req, res, next) { 
    if (req.method === 'PUT' || req.method === 'POST) { 
    //get your groove on 
    } else { 
    next(); 
    } 
}); 

可以在快递结合动词,你只需要使用所有和检查方法,如果匹配,处理其他请求明智传下来的处理程序链(带next();)。

这就是说我认为你做得对,没有理由路由处理程序需要lamdas。