用egg.js+mongodb简单实现CURDAPI

前言

本文主要使用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);
};
  • 接口名:http://localhost:7001/Delete
  • 请求方式:post
  • 请求参数:{OrderNumber}
    一个删除数据的接口就完成了。
    以上就是CURDAPI的实现过程。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容