Deno MongoDB 增刪查改 接口

#Deno MongoDB 增刪查改 接口

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

一起來完成以下步驟:

  1. 使用上個工程代碼(09.mysql增刪查改工程)。 如果你沒有看上個視頻,建議看一下。 本節將不在重複的之前的內容和代碼

  2. 修改employee 實體類,把ID刪除掉

  3. 新增mongodb 數據庫連接

  4. 修改倉庫類的增刪查改(controller到service層基本上不用修改代碼)

  5. 測試

  6. 運行命令 deno run --allow-net --allow-write --allow-read --allow-plugin --unstable main.ts

#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獲取當前工程目錄
        //注意 ' !== `
        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/[email protected]/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 })

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章