簡體   English   中英

NodeJS MySQL 和 Promises - 無法讀取未定義的屬性“查詢”?

[英]NodeJS MySQL and Promises - Cannot read property 'query' of undefined?

我只是在學習使用 Promise 並且不確定我遇到的這個錯誤;

  Cannot read property 'query' of undefined

我已經簡化了我的查詢,但仍然出現錯誤。 所以我猜它可能與我用於 MySQL 數據庫的類有關。 這是我進行查詢的地方;

var createAudiopost = async function(req, res, next){     
let row_a, row_b, row_c, row_d, row_e, row_f;    
try {    
    row_a = await mydb.query( 'SELECT * FROM audioposts'); 
     
     console.log("success");  
     res.json({     "title" : title, 
                    "userid" : userid,
                    "opid" : opid, 
                    "insert
            });     
}                           
catch(err) {
    console.log(err.message);
}
finally {
    mydb.close();
        }
}

 module.exports = createAudiopost;

在這里,我為 MySQL 數據庫創建了一個類;

const mysql = require( 'mysql' );

let config = {
    host     : 'localhost',
    user     : 'user',
    password : 'password',
    database: 'database'
};

class DataBase {
    constructor( config ) {
        this.connection = mysql.createConnection( config );
    }
    query( sql, args ) {
        return new Promise( ( resolve, reject ) => {
            this.database.query( sql, args, ( err, rows ) => {
                if ( err )
                    return reject( err );
                resolve( rows );
            } );
        } );
    }
    close() {
        return new Promise( ( resolve, reject ) => {
            this.connection.end( err => {
                if ( err )
                    return reject( err );
                resolve();
            } );
        } );
    }
}

const mydb = new DataBase(config); 

為什么我的控制台告訴我查詢未定義?

你需要綁定你的承諾函數:

    query( sql, args ) {
        return new Promise( function ( resolve, reject ) {
            this.connection.query( sql, args, ( err, rows ) => {
                if ( err )
                    return reject( err );
                resolve( rows );
            } );
        }.bind(this) );
    }

或者你可以使用別名

    query( sql, args ) {
        let that = this;
        return new Promise( function ( resolve, reject ) {
            that.connection.query( sql, args, ( err, rows ) => {
                if ( err )
                    return reject( err );
                resolve( rows );
            } );
        });
    }

暫無
暫無

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

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