#mysql #express #heroku #post #postman
Вопрос:
Серверная часть моего приложения развернута на Heroku с использованием дополнения Cleardb.
Ниже приведен бэкэнд-код: Насколько я могу судить, он попадает в запрос на публикацию.
const express = require('express');
const cors = require('cors');
//const mysql = require("mysql");
//this was the old way and did not support secure password
mysql = require('mysql2');
const app = express();
const port = process.env.PORT || 8000
/*
local connection
const db = mysql.createConnection({
connectionaLimit: 50,
user:'root',
host: 'localhost',
password:'',
database:'sys',
port: 3306
});
*/
const db = mysql.createConnection({
connectionaLimit: 120,
user: process.env.DB_USER,
host: process.env.DB_HOST,
password: process.env.DB_PASSWORD,
database: process.env.DATABASE,
port: 3306
});
app.use(cors());
app.use(express.urlencoded({extended: true}));
app.use(express.json());
//SQL connection test
db.connect((err) => {
if (err) console.error(err);
console.log('MySQL Connection Established.');
});
/* not used get request
app.get('/', (req,res) => {
res.header("Access-Control-Allow-Origin", "*");
res.send('Hello back');
}
);
*/
app.post('/' , (req,res) => {
const {email, name, question} = req.body;
res.header("Access-Control-Allow-Origin", "*");
console.log(`Your Email is ${email} and your name is ${name} and your ${question}`);
//MYSQL updating table
db.query("INSERT INTO customer_questions (name, email, question) VALUES (?,?,?)",
[name, email, question], (err,result)=> {
if (err) {
console.log(err)
}else {
res.send('data sent')
}
db.end();
}
);
});
app.listen(port);
console.log(`server is listing on ${port}`);
Это журнал ошибок. Из того, что я могу сказать, сервер запускается, а затем останавливается, и запрос post достигает статуса 500. Я могу сказать, почему это происходит.
Отправьте запрос с помощью ПОЧТАЛЬОНА, показывающего тело.
Любая помощь в этом была бы полезна. Соединение MYSQL работает как локально, так и через Heroku.
Ответ №1:
Используйте пул соединений и не закрывайте соединение:
db.end();
Вы можете запускать запросы к объекту пула, и он позаботится об открытии/закрытии соединений для вас.
Комментарии:
1. Спасибо, это предотвратило его закрытие. Я знал, что это связано с пулами соединений, однако не знал, как это реализовать. Спасибо за документацию.