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);
所以,回答你的问题:
- 是的,这是首选,并以某种方式正式的方式来做到这一点。
- 是的,你通过使用
Router
来控制整个HTTP,你应该使用另一个基于expression式的模块,比如body-parser
,error-handler
或者cookie-parser
来完成这个控制 。
注意:这假定你已经知道一个首选的一般web框架的目录结构并做模块导出。
其实我觉得这实际上是首选的方法。 您可以分别定义您的路线,只需在您的应用程序中使用它。 它提供了一个很好的问题分离。 这也使得testing你的路线很容易。 是的,您可以使用express.Router创build一个可靠的RESTful后端。 另外,它还包含所有基本的HTTP动词,如get,post,put,delete,patch等等。
Express().get
和Express.Router().get
。 区别在于路由器是更好的实践,因为它允许我们将api端点作为中间件来pipe理。
https://expressjs.com/en/api.html#router
像这样的Express和JS框架的问题是,文档没有解释为什么从使用Express主“应用程序”对象的转变。 我的猜测是,我们应该从主应用程序pipe理本身的路由逻辑(即configuration,模板,数据库连接等)