让你明明白白学知识,有代码,有讲解,抄的走,学的会!
在没有使用 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)
// .... 可继续添加其他中间件
}
上面中间件得以统一管理,配置
大致的步骤就是
- require引入包
- 配置包
- 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
其他路由一样的写法
- require 引入 express
- 创建路由 router
- 编写自己的路由 router.get() 等
- 导出路由