[英]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
或者仅使用箭头功能。
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.