Сторонний API не будет работать после развертывания - PullRequest
0 голосов
/ 09 февраля 2020

Я создал и развернул веб-сайт Basi c для Heroku. В этом приложении я использую сторонний API для отправки электронных писем (sendgrid) в контактной форме. Когда я запускал свое приложение локально на localhost: 3000, API работал как антивирус и отправлял мне электронные письма. Однако, как только я развернул свое приложение на Heroku, я получаю эту ошибку . Когда я запускаю heroku logs --tail в своем терминале, я получаю это .

По непонятным причинам API теперь перестал работать, когда я запускаю его также и локально. Я вижу, ошибка 503 означает ошибку сети, поэтому я как-то не делаю запрос к серверу? Единственное, что я изменил, что, как я мог подумать, сломало бы это:

  • Я удалил маршрутизатор реакции, чтобы изменить страницы, и вместо этого использовал реакцию-прокрутку. Может быть, это перепуталось с маршрутами, которые я использую в своем файле contact.js для отправки объекта в sendgird?
  • Я переместил свой ключ API в .env вместо того, чтобы сохранять его в своих глобальных переменных среды. Я использовал dotenv, чтобы выяснить это, но, может быть, я где-то ошибся? Когда я запускаю console.log(process.env.REACT_APP_SENDGRID_API_KEY), он записывает правильный ключ.

Здесь я вызываю API из контакта. js Форма:

  emailApi = () => {
    let sendgridObj = {
      to: 'caseyclinga@gmail.com',
      from: this.state.from,
      subject: this.state.subject,
      text: this.state.text
    }
    this.resetState();
    axios.post('/', sendgridObj)
      .then(res => console.log(`CONTACT.JS RESPONSE: ${res}`))
      .catch(err => console.log(`CONTACT.JS ERROR: ${err}`));
  }

Это сервер. js file:

const express = require('express');
var app = express();
const SgMail = require('@sendgrid/mail');
const path = require('path');
require('dotenv').config();


SgMail.setApiKey(process.env.REACT_APP_SENDGRID_API_KEY);

//Middleware
app.use(express.urlencoded({ extended: true }));
app.use(express.json());

const PORT = process.env.PORT || 5000;

//Serve static assets if in production
if(process.env.NODE_ENV === 'production') {
  //Set static folder
  app.use(express.static('client/build'))

  app.get('*', (req, res) => {
      res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'))
  })
}

app.post('/', (req, res) => {
    console.log(req.body) 
    SgMail.send(req.body)
    .then(res => console.log(`SERVER.JS RESPONSE: ${res}`))
    .catch(err => console.log(`SERVER.JS ERROR: ${err}`));
  });

app.listen(PORT, () => console.log(`Server running on port ${PORT}`))

Вот мой развернутый сайт: https://still-sands-49669.herokuapp.com/
Вот мой код: https://github.com/caseycling/portfolio

...