node.js

mongoose实现CRUD

一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据库的接口。

配置mongoose

链接mongoDB,这里我使用的是mongoDB Atlas免费服务。

const mongoose=require("mongoose");
const {connectionStr}=require("./config");

mongoose.connect(connectionStr,{ useNewUrlParser: true,useUnifiedTopology: true },()=>{
    console.log("数据库链接成功");
});
mongoose.connection.on(`error`,console.error);
mongoose.set('useFindAndModify', false);

把数据库链接String放到config配置文件中去了。

创建Schema和model

Schema是一个骨架,里面定义着数据类型。

const mongoose=require("mongoose");

const {Schema,model}=mongoose;

const userSchema=new Schema({
    name:{type: String,required:true}, //默认require也是true
    age:{type: Number,required: false}
})

module.exports=model('User',userSchema); //模型的别名,模型就是模式的实例化

增删改查举例

还是很清晰的,就不一一解释了,注意数据库查询要使用异步方式,否则会阻塞进程。

const User = require("../models/users.js");

class UserRoute {
    async create(ctx) {
        ctx.verifyParams({
            name: {type: `string`, required: true}, //默认require也是true
            age: {type: `number`, required: false}
        })
        const user=await new User(ctx.request.body).save();
        ctx.body=user;
    }

    async update(ctx) {
        ctx.verifyParams({
            name: {type: `string`, required: true}, //默认require也是true
            age: {type: `number`, required: false}
        })
        const user=await User.findByIdAndUpdate(ctx.params.id,ctx.request.body,{new:true});
        if (!user)
            ctx.throw(404, "用户不存在");
        ctx.body=user;
    }

    async deleteByid(ctx) {
       const user=await User.findByIdAndRemove(ctx.params.id);
        if (!user)
            ctx.throw(404, "用户不存在");
        ctx.status = 204;
    }

    async findByid(ctx) {
        const user = await User.findById(ctx.params.id);
        if (!user)
            ctx.throw(404, "用户不存在");
        ctx.body = user;
    }

    async getAll(ctx) {
        ctx.body = await User.find();
    }
}

module.exports = new UserRoute();