我正在使用打字稿執行快速應用程序。 路由器的代碼是:實現與打字稿的快遞控制器類
let user = new User();
router.get("/", user.test);
用戶類是
export class User {
test(req, res, next) {
// this === undefined
}
}
的問題是,該目的是測試方法內不確定的。有更好的方法來實現快速路由嗎?
我正在使用打字稿執行快速應用程序。 路由器的代碼是:實現與打字稿的快遞控制器類
let user = new User();
router.get("/", user.test);
用戶類是
export class User {
test(req, res, next) {
// this === undefined
}
}
的問題是,該目的是測試方法內不確定的。有更好的方法來實現快速路由嗎?
您需要使用bind function保持的this
範圍時,該方法被調用:
let user = new User();
router.get("/", user.test.bind(user));
或者你可以做的是,在User
構造:
export class User {
constructor() {
this.test = this.test.bind(this);
}
test(req, res, next) {
...
}
}
另一種選擇是使用arrow function:
let user = new User();
router.get("/", (req, res, next) => user.test(req, res, next));
您可以使用export default
並實例化控制器,以便無論在導入控制器的任何文件中都可以使用它,而無需實例化。
register.controller.ts
import { Router, Request, Response, NextFunction } from 'express';
class Register {
constructor() {
this.register = this.register.bind(this);
}
register(req: Request, res: Response, next: NextFunction) {
// ... removed for brevity
}
}
export default new Register();
server.ts或auth.routes.ts
import registerCtrl from '../controllers/auth/register.controller.js';
// ... removed for brevity
router.post('/register', registerCtrl.register);
你可以嘗試使用一些庫,如[路由控制器( https://github.com/pleerock/routing-controllers) – pleerock