问题描述
这是我的课程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);
}
}
然后扩展BaseController :
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);
}
}
}
但是它告诉我这个错误:
错误TypeError:无法读取未定义的属性“ 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 在新的Promise() 在__awaiter(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_request](F:\ Projects \ Nodejs \ Travel Budy \ node_modules \ express \ lib \ router \ layer.js:95:5) 在下一个(F:\ Projects \ Nodejs \ Travel Budy \ node_modules \ express \ lib \ router \ route.js:137:13) 在Route.dispatch(F:\ Projects \ Nodejs \ Travel Budy \ node_modules \ express \ lib \ router \ route.js:112:3) 在Layer.handle上[作为handle_request](F:\ Projects \ Nodejs \ Travel Budy \ node_modules \ express \ lib \ router \ layer.js:95:5) 在F:\ Projects \ Nodejs \ Travel Budy \ node_modules \ express \ lib \ router \ index.js:281:22 在Function.process_params(F:\ Projects \ Nodejs \ Travel Budy \ node_modules \ express \ lib \ router \ index.js:335:12) 在下一个(F:\ Projects \ Nodejs \ Travel Budy \ node_modules \ express \ lib \ router \ index.js:275:10) 在Function.handle(F:\ Projects \ Nodejs \ Travel Budy \ node_modules \ express \ lib \ router \ index.js:174:3) 在路由器上(F:\ Projects \ Nodejs \ Travel Budy \ node_modules \ express \ lib \ router \ index.js:47:12) 在Layer.handle [作为handle_request](F:\ Projects \ Nodejs \ Travel Budy \ node_modules \ express \ lib \ router \ layer.js:95:5)
现在出了什么问题?我该如何解决这个问题?
解决方法
尝试在注册路由处理程序时将CreatePermission
方法绑定到permission
类:
router.post('/create',permission.CreatePermission.bind(permission));
或者,您可以将static
方法更改为常规方法,创建PermissionController实例并将其用于路由处理:
import PermissionController from './../../http/controller/PermissionController';
const permission = new PermissionController()
const router = express.Router();
router.post('/create',permission.CreatePermission)