像这样有一个路由器加入Express:
in app.js
var router = express.Router(); app.use(router); app.use('/users',usersRoutes);
in userRoutes.js:
var router = express.Router(); router.get('/',function (req,res,next) { } router.get('/:user_id',next) { } router.post('/:user_id',next) { } router.put('/:user_id',next) { } router.delete('/:user_id',next) { } module.exports = router;
但我发现很难在网上找到这种类型路由器的任何可靠文档.有很多关于使用app.get,app.post,app.put,app.delete等旧样式的文档.更令人困惑的事情之一是第一个参数(路径路径)似乎需要我们作为程序员从router.get / post / put / delete方法中删除app.use参数.
例如:
app.use('/users',usersRoutes);
…这意味着usersRoutes中的所有路由已经在路径的开头有一个不可见的’/ users’ – 我不确定我还喜欢什么.
这意味着在usersRoutes.js中:
var router = express.Router(); router.get('/users/:user_id',next) { //WRONG!! } router.get('/:user_id',next) { //RIGHT }
这有点令人困惑,但也许我可以通过更长的路径欣赏.
鉴于缺少此express.Router的文档 – 我认为这不是首选的方式 – 但是可以使用express.Router创建一个可靠的RESTful后端 – 并且它是否附加了所有基本的HTTP谓词?
另一个令人困惑的事情是—->在app.js中我们有一个路由器app.use(express.Router())的实例 – 这个路由器实例如何与其他实例交互?面对它没什么意义.
解决方法
您可以完全调整代码和逻辑.
例如,您可以使用以下代码获得routes / APIRouter.js文件:
var apiRouter = express.Router(); apiRouter.get('/reports',controllers.getReports); apiRouter.get('/reports/:id',controllers.getReport); apiRouter.post('/reports',controllers.createReport); apiRouter.put('/reports/:id',controllers.updateReport); apiRouter.delete('/reports/:id',controllers.deleteReport);
你也可以使用/controllers/reportsController.js,最后在主文件app.js或者命名为server.js:
var express = require('express'); var app = new express(); var apiRouter = require('./routes/APIRouter'); app.use('/api',apiRouter);
所以,回答你的问题:
>是的,这是首选,并以某种方式正式的方式来做到这一点.
>是的,您通过使用路由器来控制整个HTTP,您应该使用另一个基于快速的模块,如:body-parser,error-handler或cookie-parser,以便完成该控制.
注意:这假设您已经知道首选的常规Web框架目录结构并执行模块导出.