node.js - 为什么在分隔路由时使用 express.Router()
问题描述
我已经阅读了 express 文档,因为我了解了 Router() 和 express.Router()。所以我的问题是我已经将我的所有路由与主应用程序分开并在那里创建了不同的文件夹我没有创建任何路由器对象(var router express.Router())来路由到特定路径,它仍然工作正常。所以我想知道为什么这个路由器类是必要的?
看,这是主应用程序文件,
'使用严格'; 常量 startUpDebugger=require('debug')('app:startUp'); const dbDebugger=require('debug')('app:db'); 常量表达 = 要求(“表达”);常量应用程序 = 快递();const moragan=require('morgan'); 常量头盔=要求('头盔');常量配置=要求('配置');常量课程=要求('./routes/courses'); const home=require('./routes/home'); app.use(头盔()); app.set('view engine','pug'); app.set('views','./view'); app.use(express.json()); app.use('/api/courses',courses); app.use('/',home);
控制台.log(
Node enironment variable: ${process.env.NODE_ENV}
); 控制台.log(Application name : ${config.get('name')}
); 控制台.log(mail server : ${config.get('mail.host')}
);if(app.get('env')==='development'){ app.use(moragan('tiny')); startUpDebugger("******摩根启用*******") }
常量端口 = process.env.PORT || 5000;app.listen(端口);
控制台.log(
Api Node running on port ${port}
);这是我的课程.js 这是我的路线文件
常量快递=要求(“快递”);常量应用=快递
常量课程=[{"id":1,"course":"course1"}, {"id":2,"course":"course2"}, {"id":3,"course":"course3" }, {"id":4,"course":"course4"}]
app.route('/posting').post((req,res)=>{ console.log(req.body); course.push(req.body) res.status(201).send(courses); } ).put((req,res)=>{ res.send("成功放置消息") }) app.get('/sub/:id',(req,res)=>{ res.status(200) .send(req.params); })
模块.出口=应用程序;
解决方案
你的问题不清楚,但如果我让你说对了:-
如果您的应用程序非常简单,则不需要路由器。
//you can just invoke express constructor and use it
const app=express()
app.get('/', function (req, res) {
res.send('root')
}) // app.get,app.post and so on
在您的主应用程序文件中。
但是一旦它开始增长,你就会想把它分成更小的“迷你应用程序”,以便更容易测试和维护,并向它添加东西。您将避免巨大的主应用程序文件:)。
所以在这里你需要为路由创建另一个文件,并且必须调用 express.Router() 类并像这样使用它:
//route.js
const Router=express.Router()
// middleware that is specific to this router
router.use(function timeLog (req, res, next) {
console.log('Time: ', Date.now())
next()
})
// define the home page route
router.get('/', function (req, res) {
res.send('Birds home page')
})
// define the about route
router.get('/about', function (req, res) {
res.send('About birds')
})
并将这个文件导入到主app文件中并传递给中间件使用
app.use('/',require('./routes/routes.js'))
与 express() 对象相比,express.Router() 对象重量轻
推荐阅读
- c++ - 为什么循环索引会超出循环范围
- android - 将 .aar 文件添加到 android studio 中的 java 模块(子项目)
- terraform - 在 Terraform 0.11.x 模板数据源中转义控制关键字
- parallels - 在 Parallels for Mac 上的 Windows 中重新映射本地主机
- css - CSS动画轮播在幻灯片之间暂停
- android - 我们如何为我们的应用程序编写自定义 lint 规则?
- node.js - SequelizeDatabaseError:“名称”列中的空值违反非空约束(NodeJS + Sequelize + Postgres)
- java - 除非明确设置资源目录,否则从 Idea 运行找不到任何资源
- python - 在 python 中更改巨大 HDF5 数组的数据类型
- python - 当我将鼠标光标放在 wxPython 列表框上时如何显示列表菜单