Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在nodejs typescript中扩展类时未定义函数_Node.js_Typescript_Typescript2.0 - Fatal编程技术网

Node.js 在nodejs 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

我想在wxtends在typescript中的类时访问该类函数

这是我的类
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(这个)
不适用于
静态
方法,因为
构造函数
中的
指的是具体实例,而
静态方法中的
指的是类本身。如果我可以删除静态,它不会显示该函数。为什么?请确保您创建了一个实例,并在注册路由处理程序时使用它。我已分别更新了答案。