初始化model
在根目录创建models文件夹,用于存放mongodb的模型一个个文件
以users举例:
1、先创建一个model出来并导出:
const mongoose = require('mongoose') // 引入mongoose
const Schema = mongoose.Schema // 引入schema(计划),可以理解计划一个模型(model)
const UserSchema = new Schema ({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
avatar: {
type: String,
required: false,
default: '//1.gravatar.com/avatar/767fc9c115a1b989744c755db47feb60?s=200&r=pg&d=mp'
},
date: {
type: String,
required: false,
default: Date.now() // default可以是一个函数,但是要return出来
},
})
// model接受两个参数,表名和schema
module.exports = User = mongoose.model('users', UserSchema)
2、引入model模块,新增一个用户,并加密密码存储到数据库中:
// login and register
const express = require('express')
const router = express.Router()
const User = require('../../models/User.js') // 引入上面定义的模型
// 引入加密
const bcrypt = require('bcrypt')
router.post('/register', (req, res) => {
User.findOne({email: req.body.email})
.then((result) => {
if (result) {
return res.status(200).json({code: 1, msg: '该邮箱已被注册!'})
}else{
// new User执行完成后存储在mongoose的虚拟内存中,并没存入到数据库中,需要调用newUser实例的save()方法!!!
const newUser = new User({
name: req.body.name,
email: req.body.email,
password: req.body.password
})
bcrypt.genSalt(10, (err, salt) => { // params(10加密级别,回调)
bcrypt.hash(newUser.password, salt, (err, hash) => {// params:(需要加密的数字,salt固定回调,回调)
if (err) {
throw err
}else{
newUser.password = hash // hash为加密后的密码
// 调用mongoose提供的保存方法,返回的是promise对象
newUser.save()
.then((userInfo) => {
console.log(`注册成功:${userInfo}`)
res.json(userInfo)
})
.catch((error) => {
console.log(`注册失败:${error}`)
res.json(error)
})
}
})
})
}
})
.catch((error) => {
console.log(`数据库未连接或出错:${error}`)
})
})
module.exports = router // 导出模块,在app.js中可以使用express中间件调用
3、删除用户:
// 删
router.post('/deleteUser', (req, res) => {
let email = req.body.email
User.deleteOne({
email
}).then((data) => {
console.log(data)
if(data.deletedCount === 1) return res.json({code: 0, msg: '删除成功'})
if(data.n === 0) return res.json({code: -1, msg: '用户不存在'})
res.json({code: -1, msg: '删除失败'})
})
})
4、修改用户:
// 改
router.post('/updateUser', (req, res) => {
let newName = req.body.name
let email = req.body.email
User.update({
email
},{
name: newName
}).then((data) => {
console.log(data)
if (data.nModified === 1) return res.json({code: 0, msg: '修改成功'}) // 修改成功
if (data.n === 0) return res.json({code: -1, msg: '用户不存在'}) // 查询条数为0
res.json({code: -1, msg: '错误,请检查后台代码'})
})
})
5、查找用户:
// 查
router.post('/getUserList', (req, res) => {
let serachText = req.body.serachText
let reg = new RegExp(serachText) // 设置正则,支持模式查询
console.log(reg)
User.find({name: reg}, {password: 0}) // 第一个参数为查询条件,第二个为data限制显示字段,为0不返回,为1则返回
.then((data) => {
console.log(data)
res.send({code: 0, total: data.length, list: data})
})
})
网友评论