gpt4 book ai didi

javascript - 这是在构造函数之外未定义的

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:45 25 4
gpt4 key购买 nike

我使用 Inversify 的依赖注入(inject)创建了一个 Express REST API。我有一个基本的 Controller 类

import { Request, Response, NextFunction } from 'express';
import { injectable, inject } from 'inversify';

import { IUserController } from './IUserController';
import { AppEntity } from '../../enterpriseBusinessRules/entities/AppEntity';
import { UserEntity } from '../../enterpriseBusinessRules/entities/UserEntity';
import { GroupEntity } from '../../enterpriseBusinessRules/entities/GroupEntity';
import { IUserUseCases } from '../../applicationBusinessRules/useCases/IUserUseCases';
import { IOCTypes } from '../../iOC/IOCTypes';

@injectable()
export class UserController implements IUserController {
public userUseCases: IUserUseCases;

constructor(@inject(IOCTypes.IUserUseCases) userUseCases: IUserUseCases) {
this.userUseCases = userUseCases;
}

public async fetchUsers(request: Request, response: Response, next: NextFunction): Promise<void>{
try {
const users: UserEntity[] = await this.userUseCases.fetchUsers(request);

response.status(200).json({
message: 'Users were fetched.',
users,
});
} catch (error) {
next(error);
}
}
}

每当我请求路由 /users 时,函数 fetchUsers 就会被执行。不幸的是,我的 API 崩溃并抛出此错误

RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined

我调试发现这个错误

TypeError: Cannot read property 'userUseCases' of undefined

this 类的构造函数中设置并且工作正常。在 fetchUsers 函数中,thisundefined。我怎样才能解决这个问题?因为我必须使用 this 来访问我的 userUseCases 变量。


编辑:感谢 Adam Kosmalas 的评论,我能够通过在构造函数中绑定(bind)函数来修复它

this.fetchUsers = this.fetchUsers.bind(this)

但我不知道这是否是最好的解决方案。然后我必须在其构造函数中绑定(bind)每个类中的每个函数...

还有其他想法吗?

最佳答案

另一种选择是使用 arrow functions用于方法声明。这样你就不需要显式绑定(bind) this:

public fetchUsers = async (request: Request, response: Response, next: NextFunction): Promise<void> => {
try {
const users: UserEntity[] = await this.userUseCases.fetchUsers(request);

response.status(200).json({
message: 'Users were fetched.',
users,
});
} catch (error) {
next(error);
}
}

关于javascript - 这是在构造函数之外未定义的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57669241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com