express 拆分路由

1,958 阅读2分钟
让你明明白白学知识,有代码,有讲解,抄的走,学的会!

在没有使用 express-generator 的情况下,对路由的拆分是有必要的,结构会更加清晰

项目结构

- API
- config                    数据库的配置文件
    - db.js                     连接数据库
- model
- public    
- routes                    所有的路由
    - index.js                  路由主入口文件
    - login.js              
    - user.js           
    - chat.js
- schema
- test
- index.js                  入口文件
- middlewareConfig.js       所有的中间件,都放在这里配置
- package.json

该项目结构不是唯一标准,每个团队都有自己的风格

项目主入口

根路径的 index.js

const express = require("express")
const app = express()

// 注册中间件
require("./middlewareConfig")(app)

app.use((req, res, next)=> {
  res.redirect("/404.html")
})

app.listen(3002, ()=> {
  console.log(`http://localhost:3002`)
})

基本上,主入口这块就比较清晰

中间件统一管理

主要来看看中间件这块, 上面index.js中将中间件 require导入进来,记得将 app实例传入进来

middlewareConfig.js

// 专门注册中间件

const express = require("express")
const bodyParser = require("body-parser")
const logger = require("morgan")
const cors = require('cors')
require("./config/db")

const path = require("path")

// 发现没,我这里 export 是一个方法,app就是方法入参,app是在index.js 中传入的
module.exports = app => {
  // 日志插件
  console.log("中间件")
  app.use(logger("dev"))

  // CORS跨域
  let corsOpt = {
    origin: "*",
    optionsSuccessStatus: 200
  }
  app.use(cors(corsOpt))

  // 静态文件托管
  app.use(express.static(path.join(__dirname, "public")))

  // 解析请求体数据
  app.use(bodyParser.json())
  app.use(bodyParser.urlencoded({ extended: false }))

  // 路由
  require("./routes")(app)
  
  // .... 可继续添加其他中间件
}

上面中间件得以统一管理,配置

大致的步骤就是

  1. require引入包
  2. 配置包
  3. app.use(包) 注册包

路由管理

routes/index.js

const userRouter = require("./user")
const loginRouter = require("./login")
const chatRouter = require("./chat")
const testRouter = require("./test")

const routes = (app) => {
  app.use("/api/login", loginRouter)
  app.use("/api/chat", chatRouter)
  app.use("/api/test", testRouter)
  app.use("/api/user", userRouter)
}

module.exports = routes

注意: 我们上面都使用了 app.use("/api/chat", chatRouter) 那么我们在这个路由里面的路径前缀,都应该是 /api/chat

比如:有如下接口

/api/chat/login

/api/chat/quit

/api/chat/

我们在下面的子路由chat.js中,只能写后面的 /login, /quit, 路由中不能再带上/api/chat 这个路径

子路由

单独子路由的写法如下 例如: chatRouter

routes/chat.js

// 创建路由对象,并编写路由,然后导出
const express = require("express")
const router = express.Router()

router.get("/login", (req, res)=> {
  res.json({
    code: 0
  })
})

router.post("/quit", (req, res)=> {
  res.json({
    code: 2
  })
})

router.post("/", (req, res)=> {
  res.json({
    code: 2
  })
})

module.exports = router

其他路由一样的写法

  1. require 引入 express
  2. 创建路由 router
  3. 编写自己的路由 router.get() 等
  4. 导出路由