Deno MySQL 增刪查改接口

視頻演示

https://www.bilibili.com/video/BV1BT4y1E7Nh/?p=9

我們一起來完成以下步驟:

  1. 使用之前工程的代碼

  2. 創建數據庫腳本

  3. 創建數據庫連接

  4. 新增員工model

  5. 創建員工倉庫類repositories

  6. 創建員工services類

  7. 添加增刪查改代碼

#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={
            id: 0,
            name: bodyValue.value.name,
            age: bodyValue.value.age 
        }

        const savedEmployee = await employeeService.save(employee);
        console.log("savedEmployee:"+savedEmployee);
        ctx.response.body = savedEmployee;

    }

    static async update(ctx: Context){
        var bodyValue = await ctx.request.body();
         let updateEmployee: Employee ={
             id:bodyValue.value.id,
             name:bodyValue.value.name,
             age:bodyValue.value.age
         }
         const updatedEmployee = await employeeService.update(updateEmployee);
         ctx.response.body=updatedEmployee;
     }

     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 findAll(ctx: any){
        const employees = await employeeService.findAll();
        ctx.response.body=employees;
     }

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


}

export default Controller;

#database/database.ts

import { Client } from "https://deno.land/x/mysql/mod.ts"

const client = await new Client().connect({
        hostname: "127.0.0.1",
        username: "root",
        db: "deno",
        poolSize: 3, 
        password: "123456"
});

export default client;

#models/employee.ts

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

#router/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.put("/update",Controller.update);
router.get("/findById/:id",Controller.findById);
router.get("/findAll",Controller.findAll);
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 update(employee: Employee){
        return  emlpoyeeRepo.update(employee);  
    }
    static async findById(id: number){
        return  emlpoyeeRepo.findById(id);
    }
    static async findAll(){
        return  emlpoyeeRepo.findAll();
    }

    static async deleteById(id: number){
        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 })



 

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