express mysql pool.getConnection, иногда это работает, иногда нет - PullRequest
0 голосов
/ 25 марта 2020

Я такой новый для Node. Я пытался получить информацию из базы данных с помощью MySQL.

. Сначала я писал коды, которые создавали сервер, создавали соединение с БД, вызывали API в файле сервера, как показано ниже:

http.createServer(app).listen(8801, async function(){
    //do something
})
router.route('/test/morphemeResultPart').get(function(req, res){
    pool.query("SELECT keyword_id, keyword_name FROM tb_name_keyword_main_part WHERE language_type='ko'", function(err, rows, fields){
        if(err) throw err;
        res.send(rows);
    })
})

Теперь я пытался разделить файл по роли каждой функции. Поэтому я создал еще один файл с именем mysql_module. js

var mysql = require('mysql');
var dao = {};
var pool;

//DB connection
dao.createPool = function(){
    pool = mysql.createPool({
        connectionLimit : 10,
        host : '14.63.197.117',
        port : '11001',
        user : 'admin',
        password : 'tjrqhd77',
        database : 'dev_new_areyousick_algorithm',
        debug : false
    })  
}
//trial no.1
dao.morphemeResultPart = function(res){
    console.log(pool==null)
    pool.getConnection(function(err, connection){
        if(err){
            throw err;
        }
        connection.query("SELECT keyword_id, keyword_name FROM tb_name_keyword_main_part WHERE language_type='ko'", [], function(err, rows){
            if(err){
                connection.release();
                throw err;
            }
            console.log('rows send')
            res.send(rows);
            connection.release();
        });
    })
}

//trial no.2
dao.morphemeResultMain = function(res){
    pool.query("SELECT keyword_id, keyword_name FROM tb_name_keyword WHERE language_type='ko'", function(err, rows, fields){
        if(err) throw err;
        res.send(rows);
    })
}

module.exports = dao;

, и файл сервера выглядит следующим образом


var express = require('express'), http=require('http');

var cors = require('cors');

var app = express();
var router = express.Router();

var dao = require('./mysql_module');

const fs = require('fs');

app.use(cors());
app.options(cors());
app.get('/products/:id', function (req, res, next) {
    res.json({msg: 'This is CORS-enabled for all origins!'})
});

app.use('/',router);
app.use(express.static(__dirname + '/resources'));


app.set('port', process.env.PORT || 8810);

dao.createPool();

http.createServer(app).listen(8810, function(){
    //do something
})

router.route('/test').get(function(req, res){
    res.writeHead(200, {'Content-Type':'text/html'});
    fs.readFile(__dirname + '/searchTest.html', (err, data)=>{
        if(err){
            return console.error(err);
        }
        res.end(data, 'utf-8');
    })
})

router.route('/test/morphemeResultPart').get(function(req, res){
    dao.morphemeResultPart(res);
})

, и я могу получить ошибку на сервере, как этот.

/root/areyousick_node_test/areyousick_node_search/express_example/mysql_module.js:26
            throw err;
            ^

Error: connect ETIMEDOUT
    at PoolConnection.Connection._handleConnectTimeout (/root/node_modules/mysql/lib/Connection.js:409:13)
    at Object.onceWrapper (events.js:417:28)
    at Socket.emit (events.js:311:20)
    at Socket._onTimeout (net.js:478:8)
    at listOnTimeout (internal/timers.js:549:17)
    at processTimers (internal/timers.js:492:7)
    --------------------
    at Protocol._enqueue (/root/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/root/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at PoolConnection.connect (/root/node_modules/mysql/lib/Connection.js:116:18)
    at Pool.getConnection (/root/node_modules/mysql/lib/Pool.js:48:16)
    at Object.dao.morphemeResultPart (/root/areyousick_node_test/areyousick_node_search/express_example/mysql_module.js:22:7)
    at /root/areyousick_node_test/areyousick_node_search/express_example/express_test.js:67:6
    at Layer.handle [as handle_request] (/root/node_modules/express/lib/router/layer.js:95:5)
    at next (/root/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/root/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/root/node_modules/express/lib/router/layer.js:95:5) {
  errorno: 'ETIMEDOUT',
  code: 'ETIMEDOUT',
  syscall: 'connect',
  fatal: true
}

Там говорится, что произошла ошибка из pool.getConnection в mysql_module. js

Пожалуйста, помогите мне! Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...