#Deno MongoDB 增刪查改 接口
視頻演示: https://www.bilibili.com/video/BV1BT4y1E7Nh/?p=10
一起來完成以下步驟:
- 使用上個工程代碼(09.mysql增刪查改工程)续膳。 如果你沒有看上個視頻饰躲,建議看一下肴茄。 本節(jié)將不在重復(fù)的之前的內(nèi)容和代碼
- 修改employee 實(shí)體類左冬,把ID刪除掉
- 新增mongodb 數(shù)據(jù)庫連接
- 修改倉庫類的增刪查改(controller到service層基本上不用修改代碼)
- 測試
- 運(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 })