Приложение Heroku не загружает данные ClearDB DataBase, если оно не запущено локально - PullRequest
0 голосов
/ 28 мая 2020

Я создал приложение с Express (NodeJS) и настроил базу данных MySQL с ClearDB в качестве конечной точки, используя пакет npm mysql. Он «обслуживает» сборку ReactJS поверх.

Приложение работает по назначению и успешно отображает данные базы данных соответственно, когда локальная сеть heroku работает, как в локальной версии, так и на сервере Heroku.

Я пробовал это , это и многие другие ответы в этой теме; прочтите this и this , но я не знаю, что мне не хватает.

В журналах Heroku отображается 304 статуса для всех запросов GET (журналы heroku -tails и Papertrail ), плюс: 2020-05-28T10:14:09.850688+00:00 heroku[web.1]: Idling 2020-05-28T10:14:09.859762+00:00 heroku[web.1]: State changed from up to down 2020-05-28T10:14:11.118546+00:00 heroku[web.1]: Stopping all processes with SIGTERM 2020-05-28T10:14:11.273036+00:00 heroku[web.1]: Process exited with status 143

Вот файл NodeJS:

const express = require('express')
const cors = require('cors')
const mysql = require('mysql')
const path = require('path');
const PORT = process.env.PORT || process.env.S_PORT;

const app = express()
app.use(cors())

const whitelist = [

список IP-адресов из белого списка

]
const corsOptions  = {
    origin: function(origin, callback) {
        if (whitelist.indexOf(origin) !== -1) {
          callback(null, true)
        } else {
            config(Error)
          callback(new Error('CORS not allowed'))
        }
    }
}

const conn = mysql.createConnection({
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME
})

const pool = mysql.createPool ({
    connectionLimit: 1000,
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME
})

pool.getConnection(function(err, conn) {
    if (err) {
        throw err
    }
    conn.release()
});

app.options('*', cors())
    .use(express.static(path.join(__dirname, 'build')))
    .set('views', path.join(__dirname, 'views'))
    .set('view engine', 'ejs')
    .get('/app*', (req, res) => {
    res.sendFile(path.join(__dirname, 'build', 'index.html'))})


app.get('/api/tasks', async (req, res, next) => {

    const SELECT_TASKS = `SELECT * FROM task WHERE state="in_progress";`
    conexion.query(SELECT_TASKS, (err, result) =>{
        if(err) {
            return res.send(err)
        } else {
            return res.json({
                data: result,
            })
        }
    })
})

app.listen(PORT, () => {
    console.log('Server listening on port',PORT,'host',process.env.DB_HOST)
})

module.exports = app;

И вот запрос React:

getTask = _ => {
    fetch(`http://`+process.env.REACT_APP_HOST_AND_PORT +`/api/tasks`)
    .then(res => res.json())
    .then(res => this.setState({tasks: res.data}))
    .catch(err => console.log(err))
  }

Мой сайт: https://lista-para-hacer.herokuapp.com/

...