用egg.js+mongodb简单实现CURDAPI

623 阅读4分钟

前言

本文主要使用egg框架和mongodb数据库,简单实现增删改查接口。具体包括如下:

  • 链接数据库
  • 创建数据表
  • 添加数据
  • 查找数据
  • 修改数据
  • 删除数据

搭建项目

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

egg初始化项目目录.png

启动项目

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/AddVisaOnArrival
  • 请求方式: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/FindVisaOnArrival
  • 请求方式: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);
};

删除数据

在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);
};

以上就是CURDAPI的实现过程。