Promise / axios: TypeError: Не удалось получить - PullRequest
0 голосов
/ 04 октября 2019

Привет. Я использую loopback в качестве серверной инфраструктуры для создания своего приложения. Так как я новичок в loopback4 и машинописи в целом, мне нужна ваша помощь. Я использую axios для отправки электронных писем подписчиков в MailChimp, дело в том, что электронные письма успешно доставляются в MailChimp, но они не сохраняются в базе данных, а бэкэнд выдает ошибку TypeError: Failed to fetch.

Как вы думаете, что может вызвать проблему?

Мой код следующий.

MailChimp.ts

const axios = require('axios');

export async function keepSubscribers(email: string) {
  const data = {
    members: [
      {
        // eslint-disable-next-line @typescript-eslint/camelcase
        email_address: email,
        status: 'subscribed'
      }
    ]
  }
  const postData = JSON.stringify(data)

  const options = {
    url: 'https://us20.api.mailchimp.com/3.0/lists/b0404295b1',
    method: 'POST',
    headers: {
      Authorization: 'auth 71634e399a09a918610fd25094e6731c-us20'
    },
    data: postData
  }

  return new Promise((resolve, reject) => {
    axios(options, async (error: object, response: { statusCode: number }) => {
      try {
        if (response.statusCode === 200) {
          return resolve("Email is successfully added")
        } else {
          return error
        }
      } catch (err) {
        reject("Error")
      }
    })
  })
}

WaitList.Controller.ts

/* eslint-disable @typescript-eslint/camelcase */
import {
  repository
} from '@loopback/repository';
import {
  post,
  getModelSchemaRef,
  requestBody,
  HttpErrors,
} from '@loopback/rest';
import { Waitlist } from '../models';
import { WaitlistRepository } from '../repositories';
import { validateCredentialsWaitlist } from '../services/validator';
import _ = require('lodash');
//const app = require('loopback-component-mailchimp')
import { keepSubscribers } from '../services/MailChimp'

export class WaitlistControllerController {
  constructor(
    @repository(WaitlistRepository)
    public waitlistRepository: WaitlistRepository,
  ) { }

  @post('/waitlists', {
    responses: {
      '200': {
        description: 'Waitlist model instance',
        content: { 'application/json': { schema: getModelSchemaRef(Waitlist) } },
      },
    },
  })
  async create(
    @requestBody({
      content: {
        'application/json': {
          schema: getModelSchemaRef(Waitlist),
        },
      },
    })
    waitlist: Waitlist,
  ): Promise<Waitlist> {
    const foundUser = await this.waitlistRepository.findOne({
      where: {
        email: waitlist.email,
      },
    });
    if (foundUser) {
      throw new HttpErrors.Forbidden(`Email ${waitlist.email} already exists`);
    }

    await keepSubscribers(waitlist.email)
    validateCredentialsWaitlist(_.pick(waitlist, ['email', 'firstName', 'secondName']));
    return this.waitlistRepository.create(waitlist);
  }
}

1 Ответ

0 голосов
/ 04 октября 2019

Решение

const axios = require('axios');

export function keepSubscribers(email: string) {
  const data = {
    members: [
      {
        // eslint-disable-next-line @typescript-eslint/camelcase
        email_address: email,
        status: 'subscribed'
      }
    ]
  }
  const postData = JSON.stringify(data)

  const options = {
    url: 'https://us20.api.mailchimp.com/3.0/lists/b0404295b1',
    method: 'POST',
    headers: {
      Authorization: 'auth 71634e399a09a918610fd25094e6731c-us20'
    },
    data: postData
  }


  axios(options).then(function (response: object) {
    console.log(response);
  })
    .catch(function (error: object) {
      console.log(error);
    });

}

И удалить await из keepSubscribers(waitlist.email) в waitlist.controller.ts

...