Как мне обернуть все мои функции с помощью оболочки asyn c в моем контроллере базы классов в машинописи node js? - PullRequest
0 голосов
/ 13 апреля 2020

В node js Я использовал обернуть свою асинхронную c функцию следующим образом в catchAyn c. js file

module.exports = fn => {
   return (req, res, next) => {
     fn(req, res, next).catch(next)
   ;}
;};

, и в своем контроллере я импортирую и вызываю вот так

const catchAsync = require('./../utils/catchAsync');

exports.signup = catchAsync(async (req, res, next) => {
  const newUser = await User.create({
    name: req.body.name,
    email: req.body.email,
    password: req.body.password,
    passwordConfirm: req.body.passwordConfirm
  });

  const url = `${req.protocol}://${req.get('host')}/me`;
  // console.log(url);
  await new Email(newUser, url).sendWelcome();

  createSendToken(newUser, 201, req, res);
});

но мой вопрос заключается в том, как мне обернуть эту оболочку catchAsyn c в основную функцию моего класса в машинописи? Вот коды catchAsyn c .ts file

import {Request, Response, NextFunction, RequestHandler} from "express";

declare function catchAsync(
    fn: (req: Request, res: Response, next: NextFunction) => Promise<Response | void>
): RequestHandler;

export default catchAsync;

Вот мой код файла контроллера

import catchAsync from "../util/catchAsync";
export class UserController {
    public async signup (req: Request, res: Response, next: NextFunction) {
        const newUser = await User.create({
          name: req.body.name,
          email: req.body.email,
          password: req.body.password,
          passwordConfirm: req.body.passwordConfirm
        });

        const url = `${req.protocol}://${req.get('host')}/me`;
        // console.log(url);
        await new Email(newUser, url).sendWelcome();

        createSendToken(newUser, 201, req, res);
    };
}

Буду очень признателен, если вы поможете мне разобраться с этой проблемой.

Спасибо.

...