注册

mongodb操作的模块手动封装

下面是mongodb操作的模块手动封装的完整攻略:

1.准备工作

在使用MongoDB之前,需要安装mongoose、mongodb两个npm包。

npm install mongoose mongodb 

2.创建数据库连接池

创建一个数据库连接池对象用于操作数据库,避免频繁地打开和关闭数据库连接。下面的示例代码演示如何创建数据库连接池,其中,DATABASE_URL是你的MongoDB数据库的URL,即mongodb://主机名:端口号/数据库名。

const mongoose = require('mongoose')
const DATABASE_URL = 'mongodb://localhost:27017/mydatabase'
const options = {
  useNewUrlParser: true,
  useUnifiedTopology: true
}

const db = mongoose.createConnection(DATABASE_URL, options)

db.on('error', () => {
  console.error('connect to %s error', DATABASE_URL)
  process.exit(1)
})

db.once('open', () => {
  console.log('connect to %s success', DATABASE_URL)
})

module.exports = db

3.封装数据模型

使用mongoose.Schema()创建数据模型,并附上固定结构的字段及数据类型。

const mongoose = require('mongoose')

const UserInfoSchema = mongoose.Schema({
   username:String,
   password:String,
   age:Number,
   sex:String,
   phoneNumber:Number,
   email:String,
})

module.exports = mongoose.model('user_info', UserInfoSchema)

4.封装数据操作方法

封装数据操作方法,包括增删改查。在这里,以CRUD(增删改查)为例,示例代码演示如何操作。

const UserInfo = require('./models/user_info')

async function createUser(user) {
  const newUser = new UserInfo(user)
  await newUser.save()
}

async function updateUser(userId, user) {
  await UserInfo.findByIdAndUpdate(userId, user)
}

async function deleteUser(userId) {
  await UserInfo.findByIdAndDelete(userId)
}

async function findUserById(userId) {
  return await UserInfo.findById(userId)
}

async function listUsers() {
  return await UserInfo.find()
}

module.exports = {
  createUser,
  updateUser,
  deleteUser,
  findUserById,
  listUsers
}

5.使用模块

在应用程序中使用封装好的模块,其中,下面的示例代码演示了如何使用封装好的模块。

const db = require('./db')
const userController = require('./controllers/user_controller')

const user = {
  username:'testuser',
  password:'1234567',
  email:'testuser@email.com',
  sex:'male',
  age: 18,
  phoneNumber:'13688888888'

}

await userController.createUser(user)

const users = await userController.listUsers()
console.log(users)

以上就是mongodb操作的模块手动封装的完整攻略和两条示例说明。有任何疑问,请随时在留言区提出。