乐趣区

关于前端:用eggjsmongodb简单实现CURDAPI

前言

本文次要应用 egg 框架和 mongodb 数据库,简略实现增删改查接口。
具体包含如下:

  • 链接数据库
  • 创立数据表
  • 增加数据
  • 查找数据
  • 批改数据
  • 删除数据

    搭建我的项目

    $ mkdir egg-example && cd egg-example
    $ npm init egg --type=simple
    $ npm i

    启动我的项目

    npm run dev
    或者
    npm run start

    在浏览器输出 http://localhost:7001/
    页面会显示 hello egg
    阐明我的项目构建胜利

    链接数据库

    首先下载 egg-mongoose

    npm i egg-mongoose --save

    配置 config/plugin.js

    'use strict';
    module.exports = {
    mongoose:{
       enable:true,
       package:"egg-mongoose" 
    }
    };

    在 config/config.default.js

    'use strict';
    module.exports = appInfo => {const config = exports = {};
    // use for cookie sign key, should change to your own and keep security
    config.keys = appInfo.name + '_1641975352438_173';
    // add your middleware config here
    config.middleware = [];
    // add your user config here
    const userConfig = {// myAppName: 'egg',};
     
     //mongoose 数据库配置
    config.mongoose={
        url:'mongodb://127.0.0.1:27021/VietNamVisa',// 端口号 27021 数据库名 VietNamVisa
        options:{useNewUrlParser:true,useUnifiedTopology:true},// 其余配置正告解除办法
    }
    
    return {
      ...config,
      ...userConfig,
    };
    };
    

    开启数据库

    关上电脑上的 mongodb 文件夹下的 bin 目录 cmd
    执行 mongod –dbpath= 存储数据的门路 –port= 数据库的端口号
    例如

    mongod  --dbpath=E:\myNode\VietNamVisa\init\app\db    --port=27021

    显示一坨代码结尾例相似这样

    s":{"type":"Windows_NT","name":"win32","architecture":"x64","version":"10.0.19041"},"platform":"'Node.js v16.13.1, LE (unified)","version":"3.7.3|5.13.14"}}}

    阐明启动胜利

对于 mongodb 装置和配置的办法请参考

增加数据

首先应用 mongoose 中的 Schema 定义模式类型和 Model 对数据库进行操作
在 app/model/visaOnArrivalModel.js
创立一个模型

module.exports=app=>{const {mongoose}=app;
    const {Schema}=mongoose;
    const VisaOnArrivalSchema=new Schema({
        // 订单号
        OrderNumber:{type:String},
        // 姓名
        FullName:{type:String},
        // 护照号
        PassportNo:{type:String},
        // 登程航班号
        DepartureFlightNumber:{type:String},
        // 入境工夫
        TimeOfEntry:{type:String},
        // 到达机场
        ArriveAtTheAirport:{type:String},
        // 航班号
        FlightNumber:{type:String},
        // 英文名
        EnglishName:{type:String},
        // 性别
        Gender:{type:String},
        // 出生日期
        DateOfBirth:{type:String},
        // 国籍
        Nationality:{type:String},
        // 护照签发日期
        PassportIssueDate:{type:String},
        // 护照有效期
        PassportPeriodOfValidity:{type:String},
        // 离境日期
        DepartureDate:{type:String},
        // 登程城市
        DepartureCity:{type:String},
        // 批文类型
        Type:{type:String},
        // 批文的状态
        Status:{type:String},
        //Checked:{type:Boolean}
    });
    return mongoose.model("VisaOnArrivalModel",VisaOnArrivalSchema,"visaonarrivals")
    }
/* 注以上代码
定义了一张名为 visaonarrivals 的数据表
该表的键值名有:OrderNumber
        FullName
        PassportNo
        DepartureFlightNumber
        TimeOfEntry
        ArriveAtTheAirport
        FlightNumber
        EnglishName
        Gender
        DateOfBirth
        Nationality
        PassportIssueDate
        PassportPeriodOfValidity
        DepartureDate
        DepartureCity 
        Type
        Status
键值的数据类型为 string 类型
mongoose 中非法色数据类型有:
*   String
*   Number
*   Date
*   Buffer
*   Boolean
*   Mixed
*   ObjectId
*   Array
*   Decimal128
*/    

在 app/service/visaOnArrivalService.js

"use strict"
const Service=require("egg").Service;
class VisaOnArrivalService extends Service {async VisaOnArrival(obj){const {ctx}=this;
        
            // 存储数据
            // 留神!!!!ctx.model.xxx 中 xxx 指的是 model 的文件名首字母大写
         const VisaOnArrivalList = new ctx.model.VisaOnArrivalModel({
                        OrderNumber:obj.OrderNumber,
                         // 姓名
                        FullName:obj.FullName,
                        // 护照号
                        PassportNo:obj.PassportNo,
                        // 登程航班号
                        DepartureFlightNumber:obj.DepartureFlightNumber,
                        // 入境工夫
                         TimeOfEntry:obj.TimeOfEntry,
                        // 到达机场
                        ArriveAtTheAirport:obj.ArriveAtTheAirport,
                        // 航班号
                        FlightNumber:obj.,
                        // 英文名
                         EnglishName:obj.FlightNumber,
                         // 性别
                         Gender:obj.Gender,
                        // 出生日期
                        DateOfBirth:obj.DateOfBirth,
                         // 国籍
                         Nationality:obj.Nationality,
                        // 护照签发日期
                         PassportIssueDate:obj.PassportIssueDate,
                         // 护照有效期
                        PassportPeriodOfValidity:obj.PassportPeriodOfValidity,
                         // 离境日期
                         DepartureDate:obj.DepartureDate,
                       // 登程城市
                         DepartureCity:obj.DepartureCity,
                         // 类型
                         Type:obj.Type,
                         // 批文的状态
                        Status:obj.Status,                
                     });
                   // 数据保留到数据库
                    VisaOnArrivalList.save();
                    return "增加胜利"
                     }
    
}
module.exports=VisaOnArrivalService;

在 app/controller/visaOnArrival.js

"use strict"
const Controller=require('egg').Controller;
class VisaOnArrival extends Controller {async VisaOnArrival(){const {ctx}=this
        //const req=ctx.request.body
        const res=await ctx.service.visaOnArrivalService.VisaOnArrival(req)
        //console.log(res)
        ctx.body={
            state:200,
            msg:res
        }
    }
}
module.exports=VisaOnArrival

在 app/router.js

'use strict';
module.exports = app => {const { router, controller} = app;
 // 增加数据
  router.post("/AddVisaOnArrival",controller.visaOnArrival.VisaOnArrival);
};
  • 接口名:http://localhost:7001/AddVisa…
  • 申请形式:post
  • 申请参数:{OrderNumber,FullName, PassportNo, DepartureFlightNumber, TimeOfEntry, ArriveAtTheAirport, FlightNumber,EnglishName, Gender, DateOfBirth,Nationality,PassportIssueDate, PassportPeriodOfValidity,DepartureDate,Type,Status}
    一个增加数据的接口就实现了

查问数据

在 app/service/findVisaOnArrivalService.js

"use strict"
const Service=require("egg").Service;
class FVisaOnArrivalService extends Service {async FVisaOnArrival(obj){const {ctx}=this;
        console.log(obj)
        //const res =await ctx.model.VisaOnArrivalModel.find({ArriveAtTheAirport:obj.ArriveAtTheAirport});
        const res =await ctx.model.VisaOnArrivalModel.find(obj);
        return res
    }
}
module.exports=FVisaOnArrivalService;

在 app/controller/findVisaOnArrival.js

"use strict"
const Controller=require('egg').Controller;
class FindVisaOnArrival extends Controller {async VisaOnArrival(){const {ctx}=this
        const req=ctx.request.body
        const res=await ctx.service.findVisaOnArrivalService.FVisaOnArrival(req)
        //console.log(res)
        ctx.body={
            state:200,
            msg:"查问胜利",
                        data:res
        }
    }
}
module.exports=FindVisaOnArrival

在 app/router.js

'use strict';
module.exports = app => {const { router, controller} = app;
 // 查问数据
  router.post("/FindVisaOnArrival",controller.findVisaOnArrival.VisaOnArrival);
};
  • 接口名:http://localhost:7001/FindVis…
  • 申请形式:post
  • 申请参数:{OrderNumber,FullName,PassportNo, DepartureFlightNumber, TimeOfEntry, ArriveAtTheAirport, FlightNumber,EnglishName, Gender, DateOfBirth,Nationality,PassportIssueDate, PassportPeriodOfValidity,DepartureDate,Type,Status}
    一个查问数据的接口就实现了

批改数据

在 app/service/reviseService.js

"use strict"
const Service=require('egg').Service;
class reviseService extends Service {async ReviseDT(obj){const {ctx}=this;
        console.log(obj)
        let res=await ctx.model.VisaOnArrivalModel.findOneAndUpdate({OrderNumber:obj.OrderID},{Status:obj.Status},function(err,data){if(err){return "批改失败"}else{return "批改胜利"}
        })
        return res
    }
}
module.exports=reviseService

在 app/controller/revise.js

"use strict"
const Controller=require('egg').Controller;
class reviseController extends Controller {async Revise(){const {ctx}=this;
        const req=ctx.request.body;
        const res=await ctx.service.reviseService.ReviseDT(req);
        //console.log(res)
        if(res){
            ctx.body={
                code:200,
                data:"批改胜利"
            }
        }else{
            ctx.body={
                code:500,
                data:"批改失败"
            }
        }
        
    }
}
module.exports=reviseController

在 app/router.js

'use strict';
module.exports = app => {const { router, controller} = app;
  // 批改状态
  router.post("/Revise",controller.revise.Revise);
};
  • 接口名:http://localhost:7001/Revise
  • 申请形式:post
  • 申请参数:{OrderNumber,Status}
  • 一个批改数据的接口就实现了

删除数据

在 app/service/deleteService.js

"use strict"
const Service=require('egg').Service;
class DeleteService extends Service {async delete(obj){const {ctx}=this;
        console.log(obj)
        let res=await ctx.model.VisaOnArrivalModel.deleteOne({OrderNumber:obj.OrderID},function(err,data){if(err){return "删除失败"}else{return "删除胜利"}
})   
        return res
   
}
module.exports= DeleteService

在 app/controller/delete.js

"use strict"
const Controller=require('egg').Controller;
class deleteController extends Controller {async Delete(){const {ctx}=this;
        const req=ctx.request.body;
        const res=await ctx.service.deleteService.delete(req);
            ctx.body={
                code:200,
                data:"删除胜利"
            }
        }
}
module.exports=deleteController

在 app/router.js

'use strict';
module.exports = app => {const { router, controller} = app;
  // 删除
  router.post("/Delete",controller.delete.Delete);
};
  • 接口名:http://localhost:7001/Delete
  • 申请形式:post
  • 申请参数:{OrderNumber}
    一个删除数据的接口就实现了。
    以上就是 CURDAPI 的实现过程。
退出移动版