Ошибка подготовленного оператора node-postgresql с нулевым результатом

Я новичок в node.js и postgresql. Я уже связан с Postgres DB и выполнить тестовый код. После того, как я собираюсь использовать подготовленные высказывания, создайте пример сценария входа. если пользователь существует, он возвращает имя пользователя, иначе возвращает сообщение "неверное имя пользователя или пароль". если имя пользователя и пароль верны, возвращается имя пользователя. но никакие данные не будут представлены, значит, не удалось вернуть сообщение. Мой вывод заключается в том, что элемент управления потерпит крах после выполнения функции cliend.end().

это мой код

UserLogin.get = function(userName, callBack) {
    pg.connect(pgConString, function(err, client, done) {
        if (err) {
            callBack("DB connection failed. " + err, null);
            return;
        }
        var selectQuery="SELECT * from  "  + TABLE + " WHERE userName=($1)";
        var query=client.query({
                text:selectQuery,
                values:[userName],
                name:"selectQuery"});

                query.on("error", function (error) {
                 callBack("DB fetch failed. Error Message: " + err, null);});

                query.on('row', function(row) {
                callBack(null, row);});

                query.on("end", function (result) {
                client.end();
                return;
                 });
            });     
}

если строка пуста, не возвращаться к обратному вызову. если row_result не пустой, он работает нормально.. Как...???? любая идея...???

2 ответа

Решение

Ваш код

query.on('row', function(row) {
  callBack(null, row);
});

означает, что обратный вызов будет вызываться каждый раз, когда запрос выбирает 1 строку из базы данных. В случае, когда запрос имеет 0 результатов, обратный вызов никогда не будет вызван.

Наконец я получил ответ. спасибо за вашу поддержку

UserLogin.get = function(userName, callBack) {
    pg.connect(pgConString, function(err, client, done) {
        if (err) {
            callBack("DB connection failed. " + err, null);
            return;
        }
        var selectQuery="SELECT * from  "  + TABLE + " WHERE userName=($1)";
       var query=client.query({
            text:selectQuery,
            values:[loginId],
            name:"selectQuery"});

            query.on("error", function (error) {
             callBack("DB fetch failed. Error Message: " + err, null);return;});

            query.on('row', function(row,result) {
            result.addRow(row);
            });

            query.on('end', function (result) {
            callBack(null,result.rows);
            client.end();
            return;
             });
        });     
}

в моем старом коде обратный вызов будет вызываться каждый раз, когда запрос выбирает 1 строку из базы данных. Я просто изменил логику

Другие вопросы по тегам