美文网首页工作生活
moogoose的简单使用与增删改查

moogoose的简单使用与增删改查

作者: Tme_2439 | 来源:发表于2019-07-01 16:55 被阅读0次

    初始化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})
            })
    })
    

    相关文章

      网友评论

        本文标题:moogoose的简单使用与增删改查

        本文链接:https://www.haomeiwen.com/subject/qpygcctx.html