簡體   English   中英

node.js-連接池

[英]node.js - connection pooling

大家好,

我只是想知道,這是否是正確的方法:

  • 從連接池獲取連接,
  • 向mysql服務器發送請求,
  • 等待結果
  • 返回連接回到連接池?

用戶每次登錄時都會調用以下代碼,它會檢查用戶名和令牌,如果匹配,則會打開主菜單頁面,否則將返回登錄頁面。

事實是,它們都可以在Chrome瀏覽器中運行,但是有時它不能在Firefox中運行,只是根本不調用connection.query()部分。

所以我只是和你們一起檢查,如果下面的代碼一切正常,或者我可以改進或更改。

var db_pool = mysql.createPool({
    host: 'localhost',
    user: 'dbuser',
    password: 'pass',
    database: 'db_name'
});

function CheckUser(username, token)
{
    db_pool.getConnection(function(err, connection) 
    {
        console.log(" [i] Getting connection from pool. ");
        var entry = 0;
        var query = connection.query("SELECT token FROM users where token = '"+token+"' and user_id = '"+username+"'");

        query.on('result', function(data){
            entry++;
        });
        query.on('error', 
            function(err){
                throw(err);
            }
        );
        query.on('end', 
            function()
            {
                if(entry == 1)
                {
                    console.log(" [info] User ["+username+"] authorized.");
                    /* DO STUFF */
                }else
                {
                    console.log(" [Error] User ["+username+"] does not have token: ["+token+"].");
                    return false;
                }
            }
        );
        console.log(" [i] Returning back connection to pool. ");
        connection.release();
    });
}

任何幫助是極大的贊賞,

亞歷克斯

我相信這種間歇行為是因為您的release()語句與連接一致,而不是在“ end”處理程序中。 這對我有用:

var mysql = require('mysql'),
    config = require('./config.json');

var pool = mysql.createPool( config );

var checkUser = function(username, token) {
    pool.getConnection(function(err, connection) {
        if (err) throw err;

        console.log(" [i] Getting connection from pool. ");
        var entry = 0,
            statement = 'SELECT token FROM users where token = ? and user_id = ?',
            query = connection.query( statement, [ token, username ] );

        query.on('result', function(data) {
            console.log( data );
            entry++;
        });

        query.on('error',  function(err) {
            console.log( err );
            throw err;
        });

        query.on('end', function() {
            if (entry === 1) {
                console.log(" [info] User ["+username+"] authorized.");
                /* DO STUFF */
            } else {
                console.log(" [Error] User [", username, "] does not have token [', token, ']');
            }

            console.log(" [i] Returning back connection to pool. ");
            connection.release();
        }); 
    });
};

console.log('check the user...');
checkUser( 'test-user', 'mytoken');

我能夠毫無問題地對此進行測試(使用替代語句)。 我還將配置內容放在單獨的文件中,並用參數替換了字符串語句。

希望這可以幫助...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM