案例优化

更新时间: 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
  • 然后新建 /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
  • 修改 bin/www 将所有代码都包在db的成功回调中,因为如果数据库都没连上的话,也就没有必要执行下面的代码了
// 导入db函数  
const db = require('../db/db')
/**
 * Module dependencies.
 */

db(() => {

  //...
  
})
1
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

# 插入数据库

  • 安装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

# 读取数据库

  • 查询列表
// 记账本的列表
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
  • 然后在模板中调用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