我正在为Node.js使用Express 4服务器
有一个路由器像Express一样烘焙到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;
但我发现在线找到这种类型的路由器很难找到任何可靠的文档。有很多关于使用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', function (req, res, next) { //WRONG!!
}
router.get('/:user_id', function (req, res, next) { //RIGHT
}
这有点令人困惑,但也许我可以通过更长的路径来欣赏它。
鉴于缺少此express.Router的文档 - 我认为这不是首选的方式 - 但是可以使用express.Router创建一个可靠的RESTful后端 - 并且它是否附加了所有基本的HTTP谓词?
另一个令人困惑的事情是---->在app.js中我们有一个路由器app.use(express.Router())
的实例 - 这个路由器实例如何与其他实例交互?从表面上看起来没什么意义。
答案 0 :(得分:9)
正如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,并且您应该使用其他基于表达的模块,例如:body-parser
,error-handler
或cookie-parser
以便完成控制。注意:这假设您已经知道首选的常规Web框架目录结构并执行模块导出。
答案 1 :(得分:5)
我实际上认为这实际上是首选方式。您可以单独定义路线,只需在应用中使用它即可。它提供了一个很好的关注点分离。它还使您的路线测试变得非常容易。是的,您可以使用express.Router创建一个可靠的RESTful后端。此外,它还附带了所有基本的HTTP动词,如get,post,put,delete,patch等。
答案 2 :(得分:1)
事实真相是一个极好的框架。但是我看到了很多关于路线处理的问题,我们都浪费了时间。而且即使正确完成,实际上只是一堆代码浪费了人们的时间,甚至浪费了正确的愚蠢错误。
您只需要执行两行代码,并让模块读取您的目录和文件结构即可处理所有app.use
路由调用,如下所示:
const magic = require('express-routemagic')
magic.use(app, __dirname, '[your route directory]')
就是这样!没什么。
对于那些想要手动处理的用户,只是不要使用将目录传递给Magic。
app.use('/i/repeat/myself', require('./routes/i/repeat/myself'))
app.use('/i/repeat/myself/again', require('./routes//i/repeat/myself/again'))
app.use('/i/keep/repeating/myself', require('./routes/i/keep/repeating/myself'))
答案 3 :(得分:0)
Express().get
与Express.Router().get
的作用相同。区别在于路由器是更好的实践,因为它允许我们将api端点作为中间件进行管理。
https://expressjs.com/en/api.html#router
Express和JS框架之类的问题是文档没有解释为什么要使用Express main" app"宾语。我的猜测是我们应该将关注点与主应用程序管理本身的路由逻辑(即配置,模板,数据库连接等)分开。