首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用inversifyjs在nodejs上响应的错误

使用inversifyjs在nodejs上响应的错误
EN

Stack Overflow用户
提问于 2021-10-09 10:40:02
回答 1查看 236关注 0票数 0

我正在使用带有类型记录、typeorm和inversify的nodejs来管理依赖注入和反版本快捷键来处理控制器,当我在里面发送响应或catch块时,只返回204没有内容响应,但是如果我发送响应是出于它的承诺,那么某个曾经参与过不可逆转的人知道会发生什么?

用户控制器:

代码语言:javascript
复制
@controller("/user")
export class UserController implements interfaces.Controller {
  constructor(@inject(TYPES.UserService) private _userService: IUserService) {}

  @httpGet("/")
  public GetAll(@request() req: Request, @response() res: Response) {
    this._userService
      .GetAll()
      .then((users) => res.send(users))
      .catch((error) => res.send(error));
  }
}

用户服务:

代码语言:javascript
复制
@injectable()
export class UserService implements IUserService {
  private readonly _userRepository: IUserRepository;

  constructor(@inject(TYPES.UserRepository) userRepository: IUserRepository) {
    this._userRepository = userRepository;
  }

  public GetAll(): Promise<Array<User>> {
    return this._userRepository.GetAll();
  }
}

用户存储库:

代码语言:javascript
复制
@injectable()
export class UserRepository implements IUserRepository {
  public GetAll(): Promise<Array<User>> {
    const userRepository = getRepository(User);

    return userRepository.find();
  }

容器和服务器配置:

代码语言:javascript
复制
export abstract class ServerConfig {
  protected app: Application;

  constructor() {
    this.Config();
  }

  private Config(): void {
    const container = new Container();

    container.bind<IUserService>(TYPES.UserService).to(UserService);
    container.bind<IUserRepository>(TYPES.UserRepository).to(UserRepository);

    const server = new InversifyExpressServer(container);

    server.setConfig((app) => {
      app.use(cors());
      app.use(helmet());
      app.use(express.urlencoded({ extended: true }));
      app.use(express.json());
      app.use(morgan("dev"));
      dotenv.config();
      app.set("port", process.env.PORT || 8000);
    });

    this.app = server.build();
  }

  public Start(): void {
    this.app.listen(this.app.get("port"), () => {
      console.log(`Server on port ${this.app.get("port")}`);
    });
  }
}
EN

回答 1

Stack Overflow用户

发布于 2022-04-04 20:01:39

您需要返回承诺,或者只是等待服务的响应。就像这样:

代码语言:javascript
复制
@controller("/user")
export class UserController implements interfaces.Controller {
 constructor(@inject(TYPES.UserService) private _userService: IUserService) {}

  @httpGet("/")
  public async GetAll(@request() req: Request, @response() res: Response): Response {
    try {
      const users = await this._userService.GetAll();
      return res.status(200).json(users);
    } catch(error) {
      return res.status(500).json(error)
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69505963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档