phz*_*nta 6 routing node.js express typescript
我正在用打字稿做一个快速的应用程序.路由器代码是:
let user = new User();
router.get("/", user.test);
Run Code Online (Sandbox Code Playgroud)
用户类是
export class User {
test(req, res, next) {
// this === undefined
}
}
Run Code Online (Sandbox Code Playgroud)
问题是这个对象在测试方法中是未定义的.有没有更好的方法来实现快速路由?
Nit*_*mer 18
您需要使用bind函数来保持this调用方法的范围:
let user = new User();
router.get("/", user.test.bind(user));
Run Code Online (Sandbox Code Playgroud)
或者您可以在User构造函数中执行此操作:
export class User {
constructor() {
this.test = this.test.bind(this);
}
test(req, res, next) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用箭头功能:
let user = new User();
router.get("/", (req, res, next) => user.test(req, res, next));
Run Code Online (Sandbox Code Playgroud)
您可以使用export default和实例化控制器,以便在导入控制器的任何文件中都可以不实例化地使用它。
寄存器控制器
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();
Run Code Online (Sandbox Code Playgroud)
server.ts或auth.routes.ts
import registerCtrl from '../controllers/auth/register.controller.js';
// ... removed for brevity
router.post('/register', registerCtrl.register);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7080 次 |
| 最近记录: |