Koa (nodejs) / TS Controller, ошибка: невозможно прочитать x неопределенного - PullRequest
0 голосов
/ 23 октября 2019

У меня есть машинопись на задней панели и у меня есть контроллер электронной почты, этот контроллер электронной почты является классом, а затем выполняет различные операции, передавая данные классу, но не при инициализации другого класса.

email.router.ts

import Router from 'koa-router';
const router = new Router();
import { Email } from '../Controllers/sendEmail.controller';
const email = new Email();
console.log('email class', email); // all data there

router.post('/resetPassword', email.resetPassword);

export default router.routes();

Класс электронной почты

export class Email {
  public conn: any = new Connection(); // all data there

  public constructor() {
    this.conn = this.conn;
    console.log('in constructor of email', this.conn); // all data there
  }

  public async resetPassword(ctx: Context): Promise<void> {
    console.log('email -->', ctx.request.body); // passed by reference correctly
    console.log('conn -->', this.conn); // error*
  }
}

Класс подключения

export class Connection {
  public smtpHost = 'host';
  public smtpPort = 1231273612;
  public smtpSecure = boolean;
  public smtpUser = 'foo@bar.com';
  public smtpPass = 'someSuperSecretPassword';

  public token: string;

  public constructor(token?: string) {
    this.token = token;
  }

  public message(): string {
    return (
      `string with ${this.token}`
  }
}

ошибка * TypeError: Cannot read property 'conn' of undefined

Я за свою жизнь борюсь с этим .... вот блиц стека 1018 *

1 Ответ

1 голос
/ 23 октября 2019

Вам необходимо связать параметр this. Либо:

router.post('/resetPassword', ctx => email.resetPassword(ctx));

, либо:

router.post('/resetPassword', email.resetPassword.bind(email));
...