Mongodb 和 Mongoose
Mongodb
Mongodb
数据库前面已经安装过了。
创建一个 imooc_lego_course
数据库,一个 work collection
。
点击 create
完成创建。
Mongoose
安装
代码语言:javascript复制npm i mongoose -S
添加 mongodb
的配置文件
module.exports = {
// mongodb 连接配置
mongodbConf: {
host: 'localhost',
port: '27017',
dbName: 'imooc_lego_course',
},
}
封装 mongoose
,连接 mongodb
// srcdbmongoose.js
const mongoose = require('mongoose')
const { mongodbConf } = require('../config/index')
const { host, port, dbName, user, password } = mongodbConf
// 拼接连接字符串
let url = `mongodb://${host}:${port}` // dev 环境
if (user && password) {
url = `mongodb://${user}:${password}@${host}:${port}` // prd 环境
}
// 开始连接( 使用用户名和密码时,需要 `?authSource=admin` )
mongoose.connect(`${url}/${dbName}?authSource=admin`, {
useNewUrlParser: true,
useUnifiedTopology: true,
})
// 连接对象
const db = mongoose.connection
db.on('error', err => {
console.error('mongoose connect error', err)
})
// 执行 node src/db/mongoose.js 测试连接
db.once('open', () => {
// 用以测试数据库连接是否成功
console.log('mongoose connect success')
})
module.exports = mongoose
控制台执行 node src/db/mongoose.js
,已正确连接数据库。
新建 model
// srcmodelsWorksModel.js
const mongoose = require('../db/mongoose')
const WorkScheme = mongoose.Schema(
{
// mongodb 会自动生成 _id,不用自己专门定义
//标题
title: String,
// 页面的组件列表
components: [Object],
// 页面的属性
props: Object,
setting: Object,
},
{
timestamps: true
}
)
const WorkModel = mongoose.model('work', WorkScheme)
module.exports = {
WorkModel
}
进一步测试数据库连接
代码语言:javascript复制// srcroutesindex.js
const router = require('koa-router')()
const packageInfo = require('../../package.json')
const testMysqlConn = require('../db/mysql2')
const ENV = require('../utils/env')
const { WorkModel } = require('../models/WorksModel')
// 测试数据库连接
router.get('/api/db-check', async (ctx) => {
// 测试 mysql 数据库连接
const mysqlRes = await testMysqlConn()
// 测试 mongodb 数据库连接
let mongodbConn
try {
mongodbConn = true
await WorkModel.findOne()
} catch (error) {
mongodbConn = false
}
ctx.body = {
errno: 0,
data: {
name: 'biz editor server',
version: packageInfo.version,
ENV,
mysqlConn: mysqlRes.length > 0,
mongodbConn
}
}
})
module.exports = router
访问 http://localhost:3000/api/db-check
,可以看到 mongodbConn
字段的值为 true
, 说明数据库连接成功了。
Date 和时区
mysql
和 Mongodb
在查询数据时,看着时间都不对,之间相差了八个小时,这跟时区有关系。
在 nodejs
中,new Date()
会显示世界标准睡觉,和北京时间相差八个时区,也就是八个小时,同理, new Date('2022-06-18 14:00:00')
的结果是 2022-06-18T06:00:00.000Z
,也相差八个小时。
如果想要获取当前时区的时间,只需要使用 toString()
即可。
可以使用一些第三方库来进行格式化,比如 date-fns
console.log('new Date()')
console.log()
console.log(new Date())
console.log()
console.log("new Date('2022-06-18 14:00:00')")
console.log()
console.log(new Date('2022-06-18 14:00:00'))
console.log()
console.log("new Date().toString()")
console.log()
console.log(new Date().toString())
控制台打印结果如下