得到javascript/typescript错误“无法读取未定义的属性'Items'"; [英] getting javascript/typescript error "Cannot read property 'Items' of undefined"
问题描述
我在JavaScript中收到错误无法读取未定义的属性'Items'". this
关键字在Base
类中始终为undefined
.
I am getting an error "Cannot read property 'Items' of undefined" in javascript. this
keyword is always undefined
in the Base
class.
如何解决此问题?在express
路由器中使用的static
方法是否存在任何问题?
how to resolve this issue? Is there any issue with static
method to use in express
router?
Typescript编译选项指向ES6
.
Typescript compile option is pointing to 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)"
}
推荐答案
无法读取未定义的属性'Items',
"Cannot read property 'Items' of undefined",
常见的JavaScript错误.您需要注意使用this
或仅使用箭头功能.
Common JavaScript error. You need to be cautions of your usage of this
or just use an arrow function.
https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html
这篇关于得到javascript/typescript错误“无法读取未定义的属性'Items'";的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!