代码之家  ›  专栏  ›  技术社区  ›  Sriram R

无法从控制器ExpressJS+Typescript返回next()

  •  0
  • Sriram R  · 技术社区  · 5 年前

    我有一个控制器,看起来像这样。

    export default class AuthController {
      static async getRegisterController(
        req: Request,
        res: Response,
        next: NextFunction,
      ): Promise<Response> {
        const vendorData: RegisterInput = {
          name: req.body.name,
          email: req.body.email,
          password: req.body.password,
          contactNo: req.body.contactNo,
          referralCode: req.body.referralCode,
        };
    
        const userWithEmail = await VendorData.getVendorWithEmail(vendorData.email);
        if (userWithEmail) {
          return next(new ConflictException('User with email already exists'));
        }
    
        const hashedPassword = await hashPassword(vendorData.password);
        vendorData.password = hashedPassword;
    
        const savedVendor = await VendorData.insertVendor(vendorData);
        const successResult = Result.success(savedVendor);
        return new ApiResponse(res, successResult).apiSuccess();
      }
    }
    

    但是,我不能归还 next() 函数的作用是,返回类型与控制器的返回类型冲突。异步函数总是返回 promise next 类型的函数返回 void . 但是,我确实需要下一个函数将我的错误传播到全局错误处理中间件以发送适当的响应。

    编辑: 我只想在我打电话给 next(err); . 只是 return; 之后 next(err) 不会像 回报; 回报 Promise<undefined>

    2 回复  |  直到 5 年前
        1
  •  0
  •   Sriram R    5 年前

    我现在找到的解决办法是让你的控制器返回 Promise<Response | undefined> . 因为路由器不关心控制器的返回类型,所以这是可能的。