Я создал приложение с 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/