用egg.js+mongodb簡單實現(xiàn)CURDAPI

前言

本文主要使用egg框架和mongodb數(shù)據(jù)庫为障,簡單實現(xiàn)增刪改查接口长捧。具體包括如下:

  • 鏈接數(shù)據(jù)庫
  • 創(chuàng)建數(shù)據(jù)表
  • 添加數(shù)據(jù)
  • 查找數(shù)據(jù)
  • 修改數(shù)據(jù)
  • 刪除數(shù)據(jù)

搭建項目

$ 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
說明項目構(gòu)建成功

鏈接數(shù)據(jù)庫

首先下載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數(shù)據(jù)庫配置
  config.mongoose={
      url:'mongodb://127.0.0.1:27021/VietNamVisa',//端口號27021數(shù)據(jù)庫名VietNamVisa
      options:{useNewUrlParser:true,useUnifiedTopology:true},//其他配置警告解除方法
  }

  return {
    ...config,
    ...userConfig,
  };
};

開啟數(shù)據(jù)庫

打開電腦上的mongodb文件夾下的bin目錄cmd
執(zhí)行mongod --dbpath=存儲數(shù)據(jù)的路徑 --port=數(shù)據(jù)庫的端口號
例如

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

顯示一坨代碼結(jié)尾例類似這樣

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"}}}

說明啟動成功
關(guān)于mongodb安裝和配置的方法請參考

添加數(shù)據(jù)

首先使用mongoose中的Schema定義模式類型和Model對數(shù)據(jù)庫進(jìn)行操作
在app/model/visaOnArrivalModel.js
創(chuàng)建一個模型

module.exports=app=>{
    const {mongoose}=app;
    const {Schema}=mongoose;
    const VisaOnArrivalSchema=new Schema({
        //訂單號
        OrderNumber:{type:String},
        //姓名
        FullName:{type:String},
        //護(hù)照號
        PassportNo:{type:String},
        //出發(fā)航班號
        DepartureFlightNumber:{type:String},
        //入境時間
        TimeOfEntry:{type:String},
        //抵達(dá)機(jī)場
        ArriveAtTheAirport:{type:String},
        //航班號
        FlightNumber:{type:String},
        //英文名
        EnglishName:{type:String},
        //性別
        Gender:{type:String},
        //出生日期
        DateOfBirth:{type:String},
        //國籍
        Nationality:{type:String},
        //護(hù)照簽發(fā)日期
        PassportIssueDate:{type:String},
        //護(hù)照有效期
        PassportPeriodOfValidity:{type:String},
        //離境日期
        DepartureDate:{type:String},
        //出發(fā)城市
        DepartureCity:{type:String},
        //批文類型
        Type:{type:String},
        //批文的狀態(tài)
        Status:{type:String},
        //Checked:{type:Boolean}
    });
    return mongoose.model("VisaOnArrivalModel",VisaOnArrivalSchema,"visaonarrivals")
    }
/*注以上代碼
定義了一張名為visaonarrivals的數(shù)據(jù)表
該表的鍵值名有:
       OrderNumber
        FullName
        PassportNo
        DepartureFlightNumber
        TimeOfEntry
        ArriveAtTheAirport
        FlightNumber
        EnglishName
        Gender
        DateOfBirth
        Nationality
        PassportIssueDate
        PassportPeriodOfValidity
        DepartureDate
        DepartureCity 
        Type
        Status
鍵值的數(shù)據(jù)類型為string類型
mongoose中合法色數(shù)據(jù)類型有:
*   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;
        
            //存儲數(shù)據(jù)
            //注意O伞!4帷哑子!ctx.model.xxx中xxx指的是model的文件名首字母大寫
         const VisaOnArrivalList = new ctx.model.VisaOnArrivalModel({
                        OrderNumber:obj.OrderNumber,
                         //姓名
                        FullName:obj.FullName,
                        //護(hù)照號
                        PassportNo:obj.PassportNo,
                        //出發(fā)航班號
                        DepartureFlightNumber:obj.DepartureFlightNumber,
                        //入境時間
                         TimeOfEntry:obj.TimeOfEntry,
                        //抵達(dá)機(jī)場
                        ArriveAtTheAirport:obj.ArriveAtTheAirport,
                        //航班號
                        FlightNumber:obj.,
                        //英文名
                         EnglishName:obj.FlightNumber,
                         //性別
                         Gender:obj.Gender,
                        //出生日期
                        DateOfBirth:obj.DateOfBirth,
                         //國籍
                         Nationality:obj.Nationality,
                        //護(hù)照簽發(fā)日期
                         PassportIssueDate:obj.PassportIssueDate,
                         //護(hù)照有效期
                        PassportPeriodOfValidity:obj.PassportPeriodOfValidity,
                         //離境日期
                         DepartureDate:obj.DepartureDate,
                       //出發(fā)城市
                         DepartureCity:obj.DepartureCity,
                         //類型
                         Type:obj.Type,
                         //批文的狀態(tài)
                        Status:obj.Status,              
                     });
                   // 數(shù)據(jù)保存到數(shù)據(jù)庫
                    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;
 //添加數(shù)據(jù)
  router.post("/AddVisaOnArrival",controller.visaOnArrival.VisaOnArrival);
};
  • 接口名:http://localhost:7001/AddVisaOnArrival
  • 請求方式:post
  • 請求參數(shù):{OrderNumber,FullName, PassportNo, DepartureFlightNumber, TimeOfEntry, ArriveAtTheAirport, FlightNumber,EnglishName, Gender, DateOfBirth,Nationality,PassportIssueDate, PassportPeriodOfValidity,DepartureDate,Type,Status}
    一個添加數(shù)據(jù)的接口就完成了

查詢數(shù)據(jù)

在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;
 //查詢數(shù)據(jù)
  router.post("/FindVisaOnArrival",controller.findVisaOnArrival.VisaOnArrival);
};
  • 接口名:http://localhost:7001/FindVisaOnArrival
  • 請求方式:post
  • 請求參數(shù):{OrderNumber,FullName,PassportNo, DepartureFlightNumber, TimeOfEntry, ArriveAtTheAirport, FlightNumber,EnglishName, Gender, DateOfBirth,Nationality,PassportIssueDate, PassportPeriodOfValidity,DepartureDate,Type,Status}
    一個查詢數(shù)據(jù)的接口就完成了

修改數(shù)據(jù)

在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;
  //修改狀態(tài)
  router.post("/Revise",controller.revise.Revise);
};
  • 接口名:http://localhost:7001/Revise
  • 請求方式:post
  • 請求參數(shù):{OrderNumber,Status}
    一個修改數(shù)據(jù)的接口就完成了

刪除數(shù)據(jù)

在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
  • 請求參數(shù):{OrderNumber}
    一個刪除數(shù)據(jù)的接口就完成了。
    以上就是CURDAPI的實現(xiàn)過程肌割。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卧蜓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子把敞,更是在濱河造成了極大的恐慌弥奸,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奋早,死亡現(xiàn)場離奇詭異盛霎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)耽装,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門愤炸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剂邮,你說我怎么就攤上這事摇幻。” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵绰姻,是天一觀的道長枉侧。 經(jīng)常有香客問我,道長狂芋,這世上最難降的妖魔是什么榨馁? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮帜矾,結(jié)果婚禮上翼虫,老公的妹妹穿的比我還像新娘。我一直安慰自己屡萤,他們只是感情好珍剑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著死陆,像睡著了一般招拙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上措译,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天别凤,我揣著相機(jī)與錄音,去河邊找鬼领虹。 笑死规哪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的塌衰。 我是一名探鬼主播诉稍,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼猾蒂!你這毒婦竟也來了均唉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肚菠,失蹤者是張志新(化名)和其女友劉穎舔箭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚊逢,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡层扶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了烙荷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镜会。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖终抽,靈堂內(nèi)的尸體忽然破棺而出戳表,到底是詐尸還是另有隱情桶至,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布匾旭,位于F島的核電站镣屹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏价涝。R本人自食惡果不足惜女蜈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望色瘩。 院中可真熱鬧伪窖,春花似錦、人聲如沸居兆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽史辙。三九已至汹买,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聊倔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工生巡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耙蔑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓孤荣,卻偏偏與公主長得像甸陌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盐股,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容