Deno MongoDB 增刪查改 接口

#Deno MongoDB 增刪查改 接口

視頻演示: https://www.bilibili.com/video/BV1BT4y1E7Nh/?p=10

一起來完成以下步驟:

  1. 使用上個工程代碼(09.mysql增刪查改工程)续膳。 如果你沒有看上個視頻饰躲,建議看一下肴茄。 本節(jié)將不在重復(fù)的之前的內(nèi)容和代碼
  2. 修改employee 實(shí)體類左冬,把ID刪除掉
  3. 新增mongodb 數(shù)據(jù)庫連接
  4. 修改倉庫類的增刪查改(controller到service層基本上不用修改代碼)
  5. 測試
  6. 運(yùn)行命令 deno run --allow-net --allow-write --allow-read --allow-plugin --unstable main.ts
image

#controllers/employeeController.ts

import { Context } from "https://deno.land/x/oak/mod.ts";
import { Employee } from "../models/employee.ts";
import employeeService from "../services/employeeService.ts";

const { cwd } = Deno;

class Controller {
    static async hello(ctx: any) {
        //cwd獲取當(dāng)前工程目錄
        //注意 ' !== `
        ctx.render(`${cwd()}/views/index.ejs`, {
            title: "Testing",
            data: { name: " Deepincoding" },
        });
    }

    static async save(ctx: Context) {
        const bodyValue = await ctx.request.body();
        let employee: Employee = {
            name: bodyValue.value.name,
            age: bodyValue.value.age,
        };
        const result = await employeeService.save(employee);
        console.log("insert employee:" + result);
        ctx.response.body = result;
    }

    static async findAll(ctx: any) {
        const employees = await employeeService.findAll();
        ctx.response.body = employees;
    }

    static async findById(ctx: any) {
        const id = ctx.params.id;
        console.log("id:" + id);
        const employee = await employeeService.findById(id);
        ctx.response.body = employee;
    }

    static async update(ctx: any) {
        //獲取更新ID
        const id = ctx.params.id;
        //更新對象放在Body 里面
        var bodyValue = await ctx.request.body();
        let updateEmployee: Employee = {
            name: bodyValue.value.name,
            age: bodyValue.value.age,
        };
        const updatedEmployee = await employeeService.update(id, updateEmployee);
        ctx.response.body = updatedEmployee;
    }

    static async deleteById(ctx: any) {
        const id = ctx.params.id;
        const result = await employeeService.deleteById(id);
        ctx.response.body = result;
    }
}

export default Controller;

#database/database.ts

import { MongoClient } from "https://deno.land/x/mongo@v0.8.0/mod.ts";

const client = new MongoClient();
client.connectWithUri("mongodb://localhost:27017");

const db = client.database("test");
export const employees = db.collection("employee");

#models/employee.ts

export interface Employee{
    name: string,
    age: number
}

#routers/employeeRouter.ts

import { Router } from "https://deno.land/x/oak/mod.ts";
import Controller from "../controllers/employeeController.ts";

const router = new Router();

router.get("/",Controller.hello);

router.post("/save",Controller.save);
router.get("/findAll",Controller.findAll);
router.get("/findById/:id",Controller.findById);
router.put("/update/:id",Controller.update);
router.delete("/deleteById/:id",Controller.deleteById);

export default router;

#services/employeeService.ts

import { Employee } from "../models/employee.ts";
import emlpoyeeRepo from "../repositories/employeeRepo.ts";

class employeeService {
    static async save(employee: Employee) {
        return emlpoyeeRepo.save(employee);
    }
    static async findAll() {
        return emlpoyeeRepo.findAll();
    }
    static async findById(id: string) {
        return emlpoyeeRepo.findById(id);
    }

    static async update(id: string, employee: Employee) {
        return emlpoyeeRepo.update(id, employee);
    }
    static async deleteById(id: string) {
        return emlpoyeeRepo.deleteById(id);
    }
}

export default employeeService;

#main.ts


import { Application } from "https://deno.land/x/oak/mod.ts"
import {viewEngine,engineFactory,adapterFactory} from "https://deno.land/x/view_engine/mod.ts";
import router from "./routers/employeeRouter.ts";

const ejsEngine = engineFactory.getEjsEngine();
const oakAdapter = adapterFactory.getOakAdapter();

const app = new Application();
app.use(viewEngine(oakAdapter,ejsEngine));
app.use(router.routes());
app.use(router.allowedMethods());

console.log("Server Port 8000");

await app.listen({port: 8000 })

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末燕鸽,一起剝皮案震驚了整個濱河市遵馆,隨后出現(xiàn)的幾起案子曹仗,更是在濱河造成了極大的恐慌仑性,老刑警劉巖古今,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屁魏,死亡現(xiàn)場離奇詭異,居然都是意外死亡捉腥,警方通過查閱死者的電腦和手機(jī)氓拼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抵碟,“玉大人桃漾,你說我怎么就攤上這事×⒋牛” “怎么了呈队?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長唱歧。 經(jīng)常有香客問我宪摧,道長,這世上最難降的妖魔是什么颅崩? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任几于,我火速辦了婚禮,結(jié)果婚禮上沿后,老公的妹妹穿的比我還像新娘沿彭。我一直安慰自己,他們只是感情好尖滚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布喉刘。 她就那樣靜靜地躺著瞧柔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪睦裳。 梳的紋絲不亂的頭發(fā)上造锅,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機(jī)與錄音廉邑,去河邊找鬼哥蔚。 笑死,一個胖子當(dāng)著我的面吹牛蛛蒙,可吹牛的內(nèi)容都是我干的糙箍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼牵祟,長吁一口氣:“原來是場噩夢啊……” “哼深夯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起课舍,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤塌西,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筝尾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捡需,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年筹淫,在試婚紗的時候發(fā)現(xiàn)自己被綠了站辉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡损姜,死狀恐怖饰剥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摧阅,我是刑警寧澤汰蓉,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站棒卷,受9級特大地震影響顾孽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜比规,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一若厚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜒什,春花似錦测秸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铃拇。三九已至,卻和暖如春肃晚,著一層夾襖步出監(jiān)牢的瞬間锚贱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工关串, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人监徘。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓晋修,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凰盔。 傳聞我的和親對象是個殘疾皇子墓卦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359