mongoose 学习笔记

盛跃
2023-12-01

mongoose下载

下载:npm  i mongoose

mongoos核心概念

schema:约束字段/列数据
model:模型对应集合,后期用它来实现数据的增删改查

Schema

英文网:http://mongoosejs.com
中文网:http://mongoosejs.net/
作用:用来约束MongoDB文档数据(哪些字段必须,哪些字段可选的)

mongoose语法

const mongoose = require('mongoose');
//连接数据库
const db = mongoose.createConnection('mongodb://user:password@localhost:port/database', {
    useNewUrlParser: true,
    useUnifiedTopology: true
}, err => {
    if (err) {
        console.log('----------------------')
        console.log('数据库连接失败', err)
        console.log('----------------------')
        return;
    }
    console.log('数据库连接成功')
})

//设置数据模型(声明是哪个集合,限制字段个数和字段类型)
const model = db.model('user', {
    name: { type: String, default: 'username' },
    age: { type: Number },
    sex: { type: String }
})

数据库插入操作:

const insertObj = new model({
    name: "张三",
    age: 18,
    sex: "男"
})
insertObj.save()
    .then(res => {
        console.log(res)
        db.close()
        return res
    })
    .catch(err => {
        console.log('插入失败' + err)
        return false
    })

数据库查找操作:

model.find({}).skip(1).limit(2) //分页
    .then(res => {
        console.log(res)
        db.close() 
        return res
    })
    .catch(err => {
        console.log('读取失败' + err)
        return false
    })

接口

概念:就是一个文件,主要响应JSON数据(操作方便,体积小)或者XML数据
p
推荐返回JSON数据模板:
{
	meta:{
		msg:提示信息,
		status:状态码(200/201/301/.....)
	},
	data:数据
}

标准的RESTful架构
	1.项目所有模块有统一的标准
	2.看URL就知道要操作的资源是什么
	3.看HTTP Method就知道操作动作是什么,是添加(post)还是删除(delete)
	4.看HTTP Status Code就知道操作结果如何,是成功(200)还是内部错误(500)
	例:
		订单模块
		/order		get
		/order		post
		/order/编号	put
		/order/编号	delete

教学管理系统开发

express

下载:npm i express
作用:一个基于nodejs开发的框架(原理基于node内置http模块封装)
语法:
//1.导入express模块
const express = require('express')
    //2.创建app对象,通过语法express()  底层原理http模块的createServer
const app = express()
var bodyParser = require('body-parser'); /*post方法*/
app.use(bodyParser.json()); // 添加json解析
app.use(bodyParser.urlencoded({ extended: false }));
//3.路由,语法 app.HTTP请求方式(路径,回调函数)
app.get('/', (req, res) => {
    //send是express用来响应数据
    res.send('hello,gmz')
})

//#学生添加
const stuController = require(process.cwd() + '/controller/stu')//process.cwd()是获取当前文件路径,实现字符串拼接

app.post('/stu', stuController.create)
app.get('/stu', stuController.index)

//4.启动服务监听端口
app.listen(3000, () => {
    console.log('http://localhost:3000')
})

在/controller/stu下定义方法

//倒入模型
const {
    createModel,
    findModel
} = require(process.cwd() + '/models/stu')


//定义处理方法
const create = async(req, res) => {
    // res.send("this is stu create")
    //1接收数据
    let postData = req.body
        //2.过滤(忽略)

    //3.操作数据库
    let rs = await createModel(postData)
        //4.判断返回
    if (rs) {
        res.send({
            meta: {
                status: 200,
                msg: "添加成功"
            },
            data: null
        })
    } else {
        res.send({
            meta: {
                state: 500,
                msg: "添加失败"
            },
            data: null
        })
    }
}

const index = async(req, res) => {
        let getData = await findModel()

        if (getData) {
            res.send({
                meta: {
                    status: 200,
                    msg: "查询成功"
                },
                data: getData
            })
        } else({
            meta: {
                status: 500,
                msg: "查询失败"
            },
            data: null
        })
    }
    //导出成员
module.exports = {
    create,
    index
}

定义模型:

const mongoose = require('mongoose');
//连接数据库
const db = mongoose.createConnection('mongodb://shop2:admin123@localhost:27017/shop', {
    useNewUrlParser: true,
    useUnifiedTopology: true
}, err => {
    if (err) {
        console.log('----------------------')
        console.log('数据库连接失败', err)
        console.log('----------------------')
        return;
    }
    console.log('数据库连接成功')
})

//设置数据模型(声明是哪个集合,限制字段个数和字段类型)
const model = db.model('stu', {
    name: { type: String, default: 'gmz' },
    age: { type: Number },
    sex: { type: String }
})

//方法
const createModel = (postData) => {
    const insertObj = new model(postData)
    return insertObj.save()
        .then(res => {
            console.log(res)
            return res
        })
        .catch(err => {
            console.log('插入失败' + err)
            return false
        })
}

const findModel = () => {
    return model.find({})
        .then(res => {
            return res
        })
        .catch(err => {
            console.log('查询失败' + err)
            return []
        })
}

module.exports = {
    createModel,
    findModel
}
 类似资料: