mongoose

1.数据库链接模块 db/index.js

定义好只好往app.js里面引入

const mongoose = require('mongoose')
const { DB_URL } = require('../params')
module.exports = _ => new Promise((resolve, reject) => {
  mongoose.connect(DB_URL, { useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify: false, useCreateIndex: true })
  mongoose.connection.on('open', err => {
    if (err) return reject(err)
    console.log('数据库链接成功')
    resolve()
  })
})
View Code

 

 

 app.js引入

启动顺序是app.js node服务器启动,然后数据库链接成功启动。然后是其他行为

const express = require('express')
const path = require('path')
const app = express()
const connectDB = require('./db/index')

~(async () => {

  await connectDB()
  app.engine('html', require('express-art-template'));
  app.set('views', path.join(__dirname, 'views'));

  app.use(express.static('./public/'))

  // 批量导入分路由
  require('./route')(app)
})()

app.listen(3000, () => {
  console.log('服务正常启动在3000端口');
})
View Code

至此完成数据库的链接

mongoose的数据库模型定义参考

const { model, Schema } = require('mongoose')
const userSchema = new Schema(
  {
    userId: {
      type: String,
      required: true,
      unique: true, //学号唯一
    },
    name: {
      type: String,
      required: true,
    },
    password: {
      type: String,
      required: true,
      select: false //select设置成false 表示从查询结果中不返回该字段值。如果要显示该字段值 T.opt().select('-password')
    },
    age: {
      type: Number,
      required: true,
      min: 0,
      age: 120

    },
    gender: {
      type: Number,
      required: true,
      enum: [0, 1], //0 男 1女 默认是男
      default: 0
    },
    hobby: {
      type: [String] //定义字符串类型数组['a','b','c'], 也就是数组类型

    },
    desc: {
      type: Schema.Types.Mixed //混合类型数据,任何类型数据都允许
    },

    createTime: {
      type: Date,
      default: Date.now
    },
    // 逻辑删除 硬盘还保存
    isActive: {
      type: Boolean,
      default: true
    }
  }, {
  versionKey: false
})
module.exports = model('User', userSchema) //model(表(集合)名字首字母大写,schema)
View Code

mongoose模型的增删改查方法

 增加

  /**
   * 用户注册
   * @param {*} request 
   * @param {*} response 
   */
  async addUser(request, response) {
    const body = request.body //并且已经是js对象类型
    // console.log("UserControl -> addUser -> body", body)
    // 数据校验(主要是数据格式和是否存在重复用户)
    const errors = validationResult(request);
    if (!errors.isEmpty()) {
      return response.status(422).json({ errors: errors.mapped({ onlyFirstError: false }) }); //onlyFirstError 默认值false 返回所有错误
    }
    // 密码加密
    body.password = await bcrypt.hash(body.password, 10)
    // 写入数据库
    const newUser = await UserModel.create(body) //body 是一个对象
    response.json({
      code: 200,
      message: '新增用户成功'
    })

    // 返回响应
  }
View Code

 

查找

async getUserList(request, response) {
    const userList = await UserModel.find() //表示查所有数据,返回数组集合
    const userList1 = await UserModel.find({ userId: '100111' }) //就算是一条数据也包裹在数组里[{}],如果条件查询不到返回[]空数组
    const userList2 = await UserModel.findOne({ gender: 0 }) //条件匹配多个,也只是返回第一个(对象形式返回).如果不匹配条件,返回null
    console.log(userList2);

    response.json({
      code: 200,
      message: '获取用户列表数据成功',
      data: userList2
    })

  }
  async getUserById(request, response) {
    let userId = request.params.id
    const user = await UserModel.findById(userId) //找到是单个数据对象{},找不到是null
    const user1 = await UserModel.findOne({ _id: userId }) //findById(userId) 和findOne({_id:userId}几乎完全等价
    const user1 = await UserModel.findOne({ _id: userId }).select('-hobby -_id') //select()选择要返回的数据内容,中间有空格
    response.json({
      code: 200,
      message: 'success',
      data: user1
    })
  }
View Code

 

更新

 

  /**
   * 根据用户ID更新数据信息
   * @param {*} request 
   * @param {*} response 
   */
  async updateUserById(request, response) {

    let userId = request.params.userId
    const res = await UserModel.updateOne({ _id: userId }, { name: 'zs' }) // res={"n": 1,"nModified": 1,"ok": 1} 修改一条
    const res1 = await UserModel.updateMany({ age: { $gt: 10 } }, { name: 'zs1' }) // res1={"n": 4,"nModified": 4,"ok": 1} 满足条件的全部修改
    const res2 = await UserModel.findByIdAndUpdate(userId, { name: 'zss' })//res2 是:如果找到了对应id,返回user对象{},查找不到id返回null
    // console.log(res2);
    response.json({
      code: 200,
      message: 'success',
      data: res2

    })
  }
View Code

 

删除

  async deleteUserById(request, response) {
    let userId = request.params.userId
    const res=await UserModel.deleteOne({_id:userId}) //res={"n": 1,"deletedCount": 1,"ok": 1} 删除一条
    const user=await UserModel.findByIdAndRemove(userId) //根据id删除,如果用户存在删除成功返回被删除的对象,根据id查找不到用户id,返回null
    console.log(user);
    UserModel.findOneAndUpdate
    response.json({
      code: 200,
      message: `删除userId是${userId}用户数据成功`,
      data:user
    })
  }
View Code

 

 

 

posted on 2020-07-18 21:41  章画  阅读(219)  评论(0)    收藏  举报

导航