express.Router()与app.get

我正在使用Express 4服务器的Node.js

有一个路由器烘焙到Express如下所示:

在app.js中

var router = express.Router(); app.use(router); app.use('/users', usersRoutes); 

在userRoutes.js中:

 var router = express.Router(); router.get('/', function (req, res, next) { } router.get('/:user_id', function (req, res, next) { } router.post('/:user_id', function (req, res, next) { } router.put('/:user_id', function (req, res, next) { } router.delete('/:user_id', function (req, res, next) { } module.exports = router; 

但是我发现很难在网上find这种types的路由器的任何可靠的文档。 对于使用app.get,app.post,app.put,app.delete等的旧样式,还有更多的文档。更令人困惑的事情之一是第一个参数(pathpath)似乎需要我们作为程序员去除了router.get / post / put / delete方法中的app.use参数。

例如:

 app.use('/users', usersRoutes); 

…这意味着'/users'路由中的所有路由在path的开始处已经有了一个不可见的'/users' – 这是我不确定我喜欢的东西。 这意味着在usersRoutes.js中:

  var router = express.Router(); router.get('/users/:user_id', function (req, res, next) { //WRONG!! } router.get('/:user_id', function (req, res, next) { //RIGHT } 

这有点令人困惑,但也许我可以用更长的path来欣赏。

鉴于缺乏这种express.Router文件 – 我认为这不是首选的方式 – 但是有可能创build一个坚实的RESTful后端express.Router – 它有所有基本的HTTP动词连接到它?

另一个令人困惑的是—->在app.js中,我们有一个路由器app.use(express.Router())实例 – 这个路由器实例如何与其他路由器交互? 在表面上没有多less意义。

正如Bidhan A的回答所述,这是使用Express进行处理的首选方式,看起来就像Express 4一样。

你可以完全调制你的代码和逻辑。

例如,您可以使用此代码拥有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); 

所以,回答你的问题:

  1. 是的,这是首选,并以某种方式正式的方式来做到这一点。
  2. 是的,你通过使用Router来控制整个HTTP,你应该使用另一个基于expression式的模块,比如body-parsererror-handler或者cookie-parser完成这个控制

注意:这假定你已经知道一个首选的一般web框架的目录结构并做模块导出。

其实我觉得这实际上是首选的方法。 您可以分别定义您的路线,只需在您的应用程序中使用它。 它提供了一个很好的问题分离。 这也使得testing你的路线很容易。 是的,您可以使用express.Router创build一个可靠的RESTful后端。 另外,它还包含所有基本的HTTP动词,如get,post,put,delete,patch等等。

Express().getExpress.Router().get 。 区别在于路由器是更好的实践,因为它允许我们将api端点作为中间件来pipe理。

https://expressjs.com/en/api.html#router

像这样的Express和JS框架的问题是,文档没有解释为什么从使用Express主“应用程序”对象的转变。 我的猜测是,我们应该从主应用程序pipe理本身的路由逻辑(即configuration,模板,数据库连接等)