根据express的路由实现简单的模块化(增删改查)
-
项目目录
-
桌面新建一个demo项目
-
初始化项目
npm init -y
-
在
package.json
配置脚本(在终端安装热部署npm i nodemon
){ "name": "demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "nodemon ./src/app.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "cors": "^2.8.5", "express": "^4.18.1", "nanoid": "^3.3.4", "nodemon": "^2.0.16" } }
-
在根目录下新建
src
文件夹,在src
新建文件app.js
-
在终端启动项目:
npm start
-
在根据目录下新建文件
user_data.js
(用作数据测试)const users = [ { id: 1, username: "zhangsan", nickname: "张三", age: 20 }, { id: 2, username: "zhaoliu", nickname: "赵六", age: 15 }, { id: 3, username: "wangwu", nickname: "王五", age: 21 }, { id: 4, username: "lisi", nickname: "李四", age: 13 }, ]; module.exports.users = users;
-
在
app.js
(入口文件)中-
安装模块
express
(npm i express
) -
安装解决跨域的第三方模块
cors
(npm i cors
)const userRouter = require("./router/user"); const express = require("express"); const cors = require("cors"); const app = express(); // 解决跨域 app.use(cors()); // 解析JSON数据 app.use(express.json()); // 解析urlencoded数据 app.use( express.urlencoded({ extended: true, }) ); // 使用路由中间件 app.use("/user", userRouter); app.listen(8000, () => { console.log("服务器开启成功"); });
-
-
在
src
文件下新建router
文件,在router
文件下新建文件夹user.js
(专门给路由为/user
放在一个模块)const express = require("express"); const { nanoid } = require("nanoid"); const { users } = require("../../user_data"); // 创建路由对象 const userRouter = express.Router(); // 查询 userRouter.get("/", (req, res) => { res.send(users); }); // 添加 userRouter.post("/", (req, res) => { users.push({ ...req.body, id: nanoid() }); res.send(users); }); // 删除 userRouter.delete("/:id", (req, res) => { users.forEach((item, index) => { if (item.id == req.params.id) { users.splice(index, 1); } }); res.send(users); }); // 修改 userRouter.patch("/", (req, res) => { users.forEach((item, index) => { if (item.id == req.body.id) { for (const itemkey in req.body) { item[itemkey] = req.body[itemkey]; } } }); res.send(users); }); // 导出用户路由 module.exports = userRouter;
-
这里测试用Postman(接口测试工具)(自己测试,我已经测试过了,这里不做展示了)