前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【架构师(第四十篇)】 服务端开发之连接 Mongodb 数据库

【架构师(第四十篇)】 服务端开发之连接 Mongodb 数据库

作者头像
一尾流莺
发布2022-12-10 13:49:32
1.3K0
发布2022-12-10 13:49:32
举报

Mongodb 和 Mongoose

Mongodb

Mongodb 数据库前面已经安装过了。

创建一个 imooc_lego_course 数据库,一个 work collection

image.png
image.png

点击 create 完成创建。

image.png
image.png

Mongoose

安装

代码语言:javascript
复制
npm i mongoose -S

添加 mongodb 的配置文件

代码语言:javascript
复制
module.exports = {
  // mongodb 连接配置
  mongodbConf: {
    host: 'localhost',
    port: '27017',
    dbName: 'imooc_lego_course',
  },
}

封装 mongoose ,连接 mongodb

代码语言:javascript
复制
// src\db\mongoose.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 ,已正确连接数据库。

image.png
image.png

新建 model

代码语言:javascript
复制
// src\models\WorksModel.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
复制
// src\routes\index.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, 说明数据库连接成功了。

image.png
image.png

Date 和时区

mysqlMongodb 在查询数据时,看着时间都不对,之间相差了八个小时,这跟时区有关系。

nodejs 中,new Date() 会显示世界标准睡觉,和北京时间相差八个时区,也就是八个小时,同理, new Date('2022-06-18 14:00:00') 的结果是 2022-06-18T06:00:00.000Z,也相差八个小时。

如果想要获取当前时区的时间,只需要使用 toString() 即可。

可以使用一些第三方库来进行格式化,比如 date-fns

代码语言:javascript
复制
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())

控制台打印结果如下

image.png
image.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mongodb 和 Mongoose
    • Mongodb
      • Mongoose
      • Date 和时区
      相关产品与服务
      云数据库 MongoDB
      腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档