简体   繁体   English

收到javascript / typescript错误“无法读取未定义的属性'Items'”

[英]getting javascript/typescript error “Cannot read property 'Items' of undefined”

I am getting an error "Cannot read property 'Items' of undefined" in javascript. 我在JavaScript中收到错误消息“无法读取未定义的属性'Items'”。 this keyword is always undefined in the Base class. this关键字在Base类中始终是undefined的。

how to resolve this issue? 如何解决这个问题? Is there any issue with static method to use in express router? express路由器中使用的static方法是否有问题?

Typescript compile option is pointing to ES6 . Typescript编译选项指向ES6

import * as express from 'express';
import {Router, Request, Response, NextFunction, Wrap } from '../../../Core';
import {FacadeRequest} from '../../../Common';

class Base {
    public Items: any = { Name: 'Natarajan Ganapathi' };
    public Get(): any {
        return this.Items;
    }
}

class User extends Base {
    public GetUsers(): any {
        return super.Get();
    }
}

export type BoRegistry = { [key: string]: () => any };

export class Facade {
    public static BoRegistry: BoRegistry = {};
    public static async GetData(req: Request, res: Response, next: NextFunction): Promise<any> {
        let promises: Array<any> = [];
        let reqs = req.body as Array<FacadeRequest>;
        reqs.forEach(fReq => {
            let route = Facade.ParseRoute(fReq.Route);
            let func = Facade.BoRegistry[route.BoName];
            if (!func) {
                throw new Error(route.BoName + ' not register in BoRegistry');
            }
            let bo = func();
            promises.push(Facade.Invoke(bo, route, fReq));
        });
        return await Promise.all(promises);
    }

    private static async Invoke(bo: any, route: { BoName: string, MethodName: string }, fReq: FacadeRequest): Promise<any> {
        let api = bo[route.MethodName];
        if (!api) {
            throw new Error(route.MethodName + ' is not available in ' + route.BoName);
        }
        let res = await api(fReq.Request);
        return { [fReq.Key]: res };
    }

    private static ParseRoute(route: string): { BoName: string, MethodName: string } {
        let r = route.split('/');
        if (r.length < 2 || r.length > 2) {
            throw new Error('Request contains improper route');
        }
        return { BoName: r[0], MethodName: r[1] };
    }
}

Facade.BoRegistry['User'] = () => new User();

let router: Router = express.Router();
router.post('/' + Facade.GetData.name, Wrap(Facade.GetData));
export default router;
{
"Message": "Cannot read property 'Items' of undefined",
"Stack": "TypeError: Cannot read property 'Items' of undefined\n    
at Get (/Users/dist/dev/Server/Modules/Base/Router/Facade.js:17:20)\n    
at GetUsers (/Users/dist/dev/Server/Modules/Base/Router/Facade.js:22:22)\n    
at Function.<anonymous> (/Users/dist/dev/Server/Modules/Base/Router/Facade.js:48:29)\n    
at next (native)\n    at __awaiter (/Users/dist/dev/Server/Modules/Base/Router/Facade.js:7:65)\n    
at __awaiter (/Users/dist/dev/Server/Modules/Base/Router/Facade.js:3:12)\n    
at Function.Invoke (/Users/dist/dev/Server/Modules/Base/Router/Facade.js:43:16)\n    
at Base.static.GetData.reqs.forEach.fReq (/Users/dist/dev/Server/Modules/Base/Router/Facade.js:37:38)\n    
at Array.forEach (native)\n    
at /Users/dist/dev/Server/Modules/Base/Router/Facade.js:30:18\n    
at next (native)\n    at __awaiter (/Users/dist/dev/Server/Modules/Base/Router/Facade.js:7:65)\n    
at __awaiter (/Users/dist/dev/Server/Modules/Base/Router/Facade.js:3:12)\n    
at GetData (/Users/dist/dev/Server/Modules/Base/Router/Facade.js:27:16)\n    
at exports.Wrap (/Users/dist/dev/Server/Core/Core.js:70:16)\n    
at Layer.handle [as handle_request] (/Users/node_modules/router/lib/layer.js:93:5)"
 }

"Cannot read property 'Items' of undefined", “无法读取未定义的属性'Items'”,

Common JavaScript error. 常见的JavaScript错误。 You need to be cautions of your usage of this or just use an arrow function. 您需要谨慎使用this或者仅使用箭头功能。

More 更多

https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM