//專門控制model
export class ProductController {
private productModel: IProductModel;
constructor({ productModel }: { productModel: IProductModel }) {
this.productModel = productModel;
}
}
export class ProductController
:productModel
:2.使用findAll
方法在IProductController控制器中處理尋找和返回所有產品數據的請求:
export interface IProductController {
//使用express.js的router API
findAll(req: Request<any, any, any, any>,
res: Response,
_next: NextFunction): void;
}
3.實現接口,處理並返回所有產品數據的請求:
export class ProductController {
private productModel: IProductModel;
constructor({ productModel }: { productModel: IProductModel }) {
this.productModel = productModel;
}
//傳到前端
findAll: IProductController["findAll"] = async (_req, res, _next) => {
const result = await this.productModel.findAll();
res.json(result);
}
}
findAll: IProductController["findAll"] = async (_req, res, _next) => {
//你的函數邏輯在這裡
}
findAll: IProductController["findAll"]
是一種函數類型宣告的設定方式。表示findAll
是 IProductController
接口中 findAll
方法的實現。const result = await this.productModel.findAll();
res.json(result);
this.productModel.findAll()
是一個非同步操作,用於從數據模型中獲取所有產品數據。await
關鍵字等待非同步操作完成,並將結果存儲在 result
變數中。res.json(result)
將結果以 JSON 格式發送回前端客戶端。這樣的命名通常表示這個參數在方法中沒有被使用。這是開發者的一種慣例,用 _
作為前綴來表明這個參數在函數或方法中是未使用的,但依然需要保留它作為函數簽名的一部分。
Product
的控制器,確保傳遞的資料正確無誤:1.定義 ProductControllerProp
介面:
interface ProductControllerProp {
productModel: IProductModel;
}
ProductControllerProp
中,它代表了傳遞給 ProductController
的屬性集合。2.靜態方法 createConstructor:
public static createConstructor({ productModel }: ProductControllerProp) {
return new ProductController({ productModel });
}
export const controllerManager ({ modelCtx }: {
modelCtx: ModelContext:
})
import { ModelContext } from './modelManager'
export const controllerManager = ({ modelCtx }: {
modelCtx: ModelContext;
}) => {
}
1.引入 ModelContext 模組:
從 ./modelManager
模組中引入了 ModelContext
,用於定義 modelCtx
的結構或功能。
2.定義 controllerManager 函數:
定義了一個名為 controllerManager
的常數函數。它接受一個具名參數 { modelCtx }
,其型別是 ModelContext
。
import { ProductController } from '@/controller/productController'
export const controllerManager = ({ modelCtx }: {
modelCtx: ModelContext
}) => {
const productController = ProductController.createConstructor({
productModel: modelCtx.productModel,
});
}
1.定義 productController
常數:
const productController = ProductController.createConstructor({
productModel: modelCtx.productModel,
});
宣告了一個名為 productController
的常數,並將其初始化為 ProductController.createConstructor
的返回值。
2.呼叫 createConstructor
方法:
ProductController.createConstructor({
productModel: modelCtx.productModel,
});
呼叫了 ProductController
類別中的 createConstructor
方法,並傳遞了一個包含屬性 productModel的參數物件,其值為 modelCtx.productModel
。
export interface ControllerContext {
productController: IProductController
}
export const controllerManager = ({ modelCtx }: {
modelCtx: ModelContext
}): ControllerContext => {
const productController = ProductController.createConstructor({
productModel: modelCtx.productModel,
});
return {
productController,
}
}
1.定義接口 ControllerContext
:
export interface ControllerContext {
productController: IProductController;
}
定義了 ControllerContext
介面,其中包含一個名為 productController
的屬性。這個屬性的型別是 IProductController
。
2.返回物件 { productController }
:
return {
productController,
}
該函數返回一個名為 productController
屬性的物件,其值是事先定義或創建的 productController
變數。
ProductController
和 controllerManager
加入 app.ts
為的是將這些控制器註冊到應用程式中,確保它們能夠處理來自客戶端的請求:src -->app.tsimport { ControllerContext } from './manager/controllerManager';//新增
class App {
controllerCtx: ControllerContext;//新增
constructor() {
this.controllerCtx = controllerManger({ modelCtx: this.modelCtx })//新增
}
1.匯入模組:
import { ControllerContext } from './manager/controllerManager';
2.定義 App
類別:
class App {
controllerCtx: ControllerContext;
3.建構函數:
constructor() {
this.controllerCtx = controllerManger({ modelCtx: this.modelCtx });
}
controllerManager
函數接收 modelCtx
作為參數,並返回一個符合 ControllerContext
介面的 controllerCtx
,其中包含必要的控制器productController
。