案例优化
更新时间: 2024-11-15 08:57:41
# 结合数据库
- 首先新建 /config/config.js 配置文件
// 配置文件
module.exports = {
DBHOST: '127.0.0.1',
DBPORT: 27017,
DBNAME: 'bilibili'
}
1
2
3
4
5
6
2
3
4
5
6
- 然后新建 /db/db.js
/**
* @param {*} success 数据库连接成功的回调
* @param {*} error 数据库连接失败的回调
*/
module.exports = function (success, error) {
// 判断为 error 为其设置默认值
if(typeof error !== 'function') {
error = () => {
console.log('连接失败~~~')
}
}
// 1. 安装mongoose
// 2. 导入mongoose
const mongoose = require('mongoose')
// 导入配置文件
const {DBHOST, DBPORT, DBNAME} = require('../config/config.js')
// 3. 连接 mongodb 服务
mongoose.connect(`mongodb://${DBHOST}:${DBPORT}/${DBNAME}`)
// 4. 设置回调
// 设置连接成功的回调 once 一次,事件回调函数只执行一次
mongoose.connection.once('open', () => {
success()
})
// 设置连接错误的回调
mongoose.connection.on('error', () => {
error()
})
// 设置连接关闭的回调
mongoose.connection.on('close',() => {
console.log('连接关闭')
})
}
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
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
- 修改 bin/www 将所有代码都包在db的成功回调中,因为如果数据库都没连上的话,也就没有必要执行下面的代码了
// 导入db函数
const db = require('../db/db')
/**
* Module dependencies.
*/
db(() => {
//...
})
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 准备模型文件
// model/AccountModel.js
// 导入 mongoose
const mongoose = require('mongoose')
// 创建文档的结构对象
// 设置集合中文档的属性以及属性值的类型
let AccountSchema = new mongoose.Schema({
// 标题
title: {
type: String,
required: true
},
// 时间
time: Date,
// 类型
type: {
type: Number,
default: -1
},
// 金额
account: {
type: Number,
required: true
},
// 备注
remarks: {
type: String
}
})
// 创建模型对象 对文档操作的封装对象
let AccountModel = mongoose.model('accounts', AccountSchema)
// 暴露模型对象
module.exports = AccountModel
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
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
# 插入数据库
安装moment
npm i moment修改新增
// 新增记录
router.post('/account', (req, res) => {
AccountModel.create({
...req.body,
time: moment(req.body.time).toDate()
}).then(data => {
res.render('success', {msg: '添加成功哦~', url:'/account'})
}).catch(err => {
console.log(err)
res.status(500).send('插入失败~')
return
})
})
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 读取数据库
- 查询列表
// 记账本的列表
router.get('/account', function(req, res, next) {
// 获取所有的账单信息
AccountModel.find().sort({time: -1}).then(data => {
res.render('list',{accounts: data, moment: moment})
})
});
1
2
3
4
5
6
7
2
3
4
5
6
7
- 然后在模板中调用moment
<%= moment(item.time).format('YYYY-MM-DD') %>
1
# 删除文档
// 删除记录
router.get("/account/:id", (req, res) => {
// 获取params的id参数
let id = req.params.id
// 删除
AccountModel.deleteOne({_id: id}).then(data => {
// 提醒
res.render('success', {msg: '删除成功~', url:'/account'})
}).catch(err => {
res.status(500).send('删除失败~~')
})
})
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13