Node.js 在nodejs typescript中扩展类时未定义函数
我想在wxtends在typescript中的类时访问该类函数 这是我的类Node.js 在nodejs typescript中扩展类时未定义函数,node.js,typescript,typescript2.0,Node.js,Typescript,Typescript2.0,我想在wxtends在typescript中的类时访问该类函数 这是我的类BaseController: "use strict"; import { validationResult } from "express-validator"; import applyBind from 'auto-bind'; export class ValidationResult { haveError: boolean; errorMess
BaseController:
"use strict";
import { validationResult } from "express-validator";
import applyBind from 'auto-bind';
export class ValidationResult {
haveError: boolean;
errorMessage: string[];
constructor(haveError: boolean, errorMessage: string[]) { }
}
export default class BaseCotnroller {
constructor() {
applyBind.bind(this);
}
static async ValidationAction(req, res): Promise<ValidationResult> {
const result = await validationResult(req);
if (!result.isEmpty()) {
let errors = result.array();
let message = [];
errors.forEach((element) => {
message.push(element.msg);
});
return new ValidationResult(true, message);
}
return new ValidationResult(false, null);
}
}
import BaseCotnroller from './BaseController';
export default class PermissionController extends BaseCotnroller {
constructor() {
super();
}
/*** Create Permission ****/
static async CreatePermission(req, res, next) {
let validationData = await this.ValidationAction(req, res);
if (!validationData.haveError) {
PermissionRepository.CreatePermission(req)
.then(() => {
this.Ok(res);
})
.catch((error) => {
return this.BadRerquest(res, error);
});
} else {
return this.BadRerquest(res, validationData.errorMessage);
}
}
}
但它告诉我这个错误:
错误类型错误:无法读取未定义的属性“ValidationAction”
在F:\Projects\Nodejs\Travel Budy\src\http\controller\PermissionController.ts:20:45
在Generator.next()处
在F:\Projects\Nodejs\Travel Budy\src\http\controller\PermissionController.ts:8:71
在新的承诺()
在等待者(F:\Projects\Nodejs\Travel Budy\src\http\controller\PermissionController.ts:4:12)
在CreatePermission(F:\Projects\Nodejs\Travel Budy\src\http\controller\PermissionController.ts:24:16)
在Layer.handle[作为handle\u请求](F:\Projects\Nodejs\Travel Budy\node\u modules\express\lib\router\Layer.js:95:5)
下一步(F:\Projects\Nodejs\Travel Budy\node\u modules\express\lib\router\route.js:137:13)
在Route.dispatch(F:\Projects\Nodejs\Travel Budy\node\u modules\express\lib\router\Route.js:112:3)
在Layer.handle[作为handle\u请求](F:\Projects\Nodejs\Travel Budy\node\u modules\express\lib\router\Layer.js:95:5)
在F:\Projects\Nodejs\Travel Budy\node\u modules\express\lib\router\index.js:281:22
在Function.process_参数处(F:\Projects\Nodejs\Travel Budy\node_modules\express\lib\router\index.js:335:12)
下一步(F:\Projects\Nodejs\Travel Budy\node\u modules\express\lib\router\index.js:275:10)
位于Function.handle(F:\Projects\Nodejs\Travel Budy\node\u modules\express\lib\router\index.js:174:3)
路由器(F:\Projects\Nodejs\Travel Budy\node\u modules\express\lib\router\index.js:47:12)
在Layer.handle[作为handle\u请求](F:\Projects\Nodejs\Travel Budy\node\u modules\express\lib\router\Layer.js:95:5)
现在有什么问题?如何解决此问题?注册路由处理程序时,尝试将
CreatePermission
方法绑定到permission
类:
router.post('/create', permission.CreatePermission.bind(permission));
或者,您可以将静态方法更改为常规方法,创建PermissionController实例并将其用于路由处理:
import PermissionController from './../../http/controller/PermissionController';
const permission = new PermissionController()
const router = express.Router();
router.post('/create', permission.CreatePermission)
您如何调用静态CreatePermission
方法?我这样调用:import permission from'/../http/controller/PermissionController';const router=express.router();router.post('/create',permission.CreatePermission)
这是否回答了您的问题@JaredSmith这对我来说不管用,这只是当有人将你的问题链接为现有问题的副本时自动生成的评论。如果不先绑定一个方法,就不能将其作为回调传递。它是有效的,但我认为这不是一个好方法。我正在使用这个constructor(){applyBind.bind(this);}
但它不起作用。为什么?applyBind.bind(这个)
不适用于静态
方法,因为构造函数
中的此
指的是具体实例,而静态方法中的此
指的是类本身。如果我可以删除静态,它不会显示该函数。为什么?请确保您创建了一个实例,并在注册路由处理程序时使用它。我已分别更新了答案。