开发者问题收集

node-mysql:使用 object.query 时出错

2013-12-27
407

我正在学习 nodejs 并使用“mysql”模块。使用此功能,我想验证数据库中是否已存在名称。

我遇到了当前错误

TypeError: Object #<Handshake> has no method 'query'

我认为它与“this.query”有关,但找不到修复它的方法。

代码

var mysql = require('mysql');
var conexao_bd = mysql.createConnection({
    host: 'localhost',
    user: 'user',
    password: 'password',
    database: 'db_name'
});

function verifica_nome(n){
    var bool = false;
    conexao_bd.connect(function(err){
        if(err){
            return console.log("Aconteceu um erro quando se tentava ligar à base de dados. Erro: "+err);
        }
        else{
            this.query("SELECT name FROM Users WHERE name=?", [n], function(err,rows){
                if(err != null){ this.end("Erro na query: "+err); }
                else{
                    if(rows[0]!=n){ bool=true; this.end(function(err){ return bool;})}
                    else{ this.end(function(err){ return bool;})}
                }
            });
        }
    });
}
2个回答

您应该使用 conexao_bd ,它是连接对象,而不是 this :

conexao_bd.query(...);
conexao_bd.end();
robertklep
2013-12-27

您想在查询时执行 robertklep 所说的操作,但不调用 end (),您将关闭连接。对于您的简单示例,我将假设您在应用程序/模块启动/需要时创建数据库连接,因此仅在应用程序结束时关闭连接。我相信您只需要在 process.on('exit') 上设置一个事件,如下所示:

process.on('exit', function() {
    conexao_bd.end();
});

这样,您的连接仅在应用程序结束时关闭,而不是在第一次查询后关闭。

Chris
2013-12-27