koa2+mongodb搭建后端api项目
使用koa2+mongodb搭建后端api项目
一、环境搭建
1 | 自行安装 node + npm |
二、安装脚手架并创建项目
1 | npm i -g koa-generator |
三、安装依赖并启动项目
1 | npm i |
四、数据库操作(模块化开发)
脚手架生成的初始文件目录结构
创建mongodb文件夹
mongodb文件夹结构
1 | controller文件夹: 存放对数据库增删改查的函数的文件,文件名对应数据库中的一个表(集合); |
模块化开发
- 先创建mongodb/index.js文件,再在app.js中导入,导入时注意模块导入顺序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27/**
* mongodb/index.js
* @file 连接数据库
* @author kenis
*/
const mongoose = require("mongoose");
mongoose.connect("mongodb://192.168.43.158:27017/car");
mongoose.Promise = global.Promise;
let db = mongoose.connection;
// 监听打开成功还是失败
db.on("error", err => {
// 链接失败
console.log(err, "链接失败");
});
db.once("connected", function () {
// 链接成功
console.log("链接成功");
});
db.once("disconnected", function () {
// 断开链接
console.log("断开链接");
});
module.exports = db;
1 | /** |
- 创建数据库集合的模板类型和模型
1
2
3
4
5
6
7
8
9
10
11
12/**
* mongodb/schemas/car.js
* 创建模板类型
*/
const mongoose = require("mongoose");
const sportsCarSchema = new mongoose.Schema({
// 说明集合中要存储的字段,字段类型
name_zh_CN: String,
name_en_US: String,
});
module.exports = { sportsCarSchema };
1 | /** |
创建操作数据库的控制器文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115/**
* mongodb/controller/car.js
*/
const { SportsCarModel } = require("../mongodb/models/car");
/**
* 查询所有数据
* @param {*} ctx
* @returns
*/
const findAll = async ctx => {
let code = 0; // 状态码 0:成功 -1:失败
let result = ""; // 返回内容
try {
let doc = await SportsCarModel.find({});
code = 0;
result = "查找成功";
data = doc;
} catch (err) {
code = -1;
result = "查找失败";
data = err;
}
ctx.response.body = {
code,
result,
data,
};
return result;
};
/**
* 删除
* @param {*} ctx
* @returns
*/
const delOne = async ctx => {
let code = 0; // 状态码 0:成功 -1:失败
let result = ""; // 返回内容
try {
let doc = await SportsCarModel.deleteOne(ctx.request.body);
code = 0;
result = "删除成功";
data = doc;
} catch (err) {
code = -1;
result = "删除失败";
data = err;
}
ctx.response.body = {
code,
result,
data,
};
return result;
};
/**
* 添加
* @param {*} ctx
* @returns
*/
const addOne = async ctx => {
let code = 0; // 状态码 0:成功 -1:失败
let result = ""; // 返回内容
try {
let doc = await SportsCarModel.create(ctx.request.body);
code = 0;
result = "添加成功";
data = doc;
} catch (err) {
code = -1;
result = "添加失败";
data = err;
}
ctx.response.body = {
code,
result,
data,
};
return result;
};
/**
* 通过id修改数据
* @param {*} ctx
* @returns
*/
const updateOne = async ctx => {
let code = 0; // 状态码 0:成功 -1:失败
let result = ""; // 返回内容
try {
const { id, update } = ctx.request.body;
let doc = await SportsCarModel.findByIdAndUpdate(id, update);
code = 0;
result = "修改成功";
data = doc;
} catch (err) {
code = -1;
result = "修改失败";
data = err;
}
ctx.response.body = {
code,
result,
data,
};
return result;
};
module.exports = { findAll, delOne, addOne, updateOne };创建路由文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34/**
* routes/cars.js
*/
const router = require("koa-router")();
const {
findAll,
delOne,
addOne,
updateOne,
} = require("../mongodb/controller/car");
router.prefix("/cars");
/**
* 查询所有
*/
router.get("/list", findAll);
/**
* 删除
*/
router.delete("/del", delOne);
/**
* 添加
*/
router.post("/add", addOne);
/**
* 修改
*/
router.post("/update", updateOne);
module.exports = router;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kenis!
评论