express框架中路由的基本使用以及多重路由的嵌套

  • 一般来讲,我们使用node写后端服务器的时候不可避免的需要写接口(get,post),但是接口多的话写在一个app.js中难免会使得代码非常的冗余,我们修改起来也非常的不方便,而且这也不符合模块化规范,这时就可以使用我们express中内置的路由器模块Router
  • 我们可以使用它来集中的管理我们的接口url路径,也就是集中管理我们的路由,并且当我们的项目当中出现多级路由的使用,同样可以使用它来进行路由的分层

案例需求

  • 实现网页对应的url跳转
/api/user           ====> 用户页            (二级路由)
/api/user/info ====> 用户信息页 (三级级路由)

/api/shop ====> 商店页 (二级路由)

/api/setting ====> 设置页 (二级路由)

1. 全部接口写在app.js中(不推荐)

  • app.js(服务器实例)
// 1.引入express框架
const express = require('express')
// 2.创建app服务器
const app = express()

app.get('/api/user',(req,res)=>{
res.send('用户页')
})

app.get('/api/user/info',(req,res)=>{
res.send('用户信息页')
})

app.get('/api/shop',(req,res)=>{
res.send('商店页')
})

app.get('/api/setting',(req,res)=>{
res.send('设置页')
})

// 3.设置监听端口(启动服务器)
app.listen(3000 , ()=>{
console.log('服务器已启动! 端口3000正在监听...');
})
  • 这种方法将所有的接口都写在了app.js中,可行但是不推荐,因为接口一旦多起来的话,整个app.js看起来就会非常的乱,很难接口复用并且一旦发生错误,排查起来也会非常的困难

2. 使用express路由器来集中管理接口(二级路由)

  • 这时我们在app.js外多建立一个router.js用于二级路由的设置,在这个二级路由中我们就可以集中管理/api/中的二级url指向了,切记我们在router.jsapp.js中做了路由分割,因此我们需要理清url的拼接问题,也就是说,我们在app.js中引入并挂载了/api/对应的二级路由后,那么在router.js中就不需要再设置接口的时候加上/api/了!
  • router.js(二级路由实例)
/* ---------------- router.js(二级路由) ------------------ */
// 设置路由(当我们需要写很多个接口的时候,就不合适全部写在app.js里面了,这样会显得很乱)
// 此时引入router(express框架里面的路由器,用于集中管理我们的接口路由)

var express = require('express');
var router = express.Router();// 引入express路由器

router.get('/user',async (req,res)=>{
res.send('用户页')
})

router.get('/user/info',async (req,res)=>{
res.send('用户信息页')
})

router.get('/shop',async (req,res)=>{
res.send('商店页')
})

router.get('/setting',async (req,res)=>{
res.send('设置页')
})

module.exports = router;// 将路由暴露出去
  • app.js(服务器实例)
/* -------------------- app.js --------------------- */
// 1.引入express框架
const express = require('express')

// 2.创建app服务器
const app = express()

// 引入路由器
const router = require('./router.js')
app.use('/api',router)// 挂载路由器
/* 这样就路由器拼接上对应的路由url了: /api/+二级路由url */
// 注意是一级和二级要拼为完整的路由才可访问

// 设置监听端口
app.listen(3000 , ()=>{
console.log('服务器已启动! 端口3000正在监听...');
})
  • 这种方法适用于只有两级路由的接口设置,对于上述案例(多级路由)来讲还不算是最好的解决方法。

3. 使用多级路由嵌套方法来解决

  • 我们由案例的需求可以看出,/user路径哈有一个/user/info的接口设置,这样我们完全可以再设置一个三级路由来拼接user/路径,因此我们在设置一个userRouter.js来设置/user的三级路由
  • userRouter.js(user路由中的三级路由实例)
/* ------------------ userRouter.js(三级路由) ------------------- */
var express = require('express');
var router = express.Router();// 引入express路由器

// 使用express路由器实例来编辑接口
router.get('/info',(req,res)=>{//三级路由接口
res.send('用户信息页!')
})

module.exports = router;// 将三级路由暴露出去(给二级路由)
  • router.js(二级路由实例)
/* ------------------- router.js(二级路由) ---------------------- */
// 设置路由(当我们需要写很多个接口的时候,就不合适全部写在app.js里面了,这样会显得很乱)
// 此时引入router(express框架里面的路由器,用于集中管理我们的接口路由)

var express = require('express');
var router = express.Router();// 引入express路由器(二级路由)
var userRouter = require('./router2')//三级路由

// 多级路由的分层(再次使用express路由来拼接'/user'和'/info')
router.use('/user',userRouter)// router.use方法能将三级路由挂载到二级路由身上

router.get('/user',async (req,res)=>{//二级路由接口
res.send('用户页')
})

router.get('/shop',async (req,res)=>{//二级路由接口
res.send('商店页')
})

router.get('/setting',async (req,res)=>{//二级路由接口
res.send('设置页')
})

module.exports = router;// 将路由暴露出去
  • app.js(服务器实例)
/* ------------------------------ app.js(服务器实例) ----------------------------- */
// 1.引入express框架
const express = require('express')

// 2.创建app服务器
const app = express()

// 引入二级路由器
const router = require('./router.js')

app.use('/api',router)// 挂载路由器
// 注意是一级路由要和二级路由一级三级路由拼为完整的路由才可访问


// 设置监听端口
app.listen(3000 , ()=>{
console.log('服务器已启动! 端口3000正在监听...');
})

结果展示:

image