Почему этот почтовый запрос не поступает от почтальона?

#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. Спасибо, это предотвратило его закрытие. Я знал, что это связано с пулами соединений, однако не знал, как это реализовать. Спасибо за документацию.