0

私は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 が空でない場合、正常に動作します..どのように...???? 何か案が...???

4

2 に答える 2

2

最後に私は答えを得ました。サポートしてくれてありがとう

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 行をフェッチするたびにコールバックが呼び出されます。ロジックを変更しただけです

于 2015-11-23T10:09:48.647 に答える
0

あなたのコード

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

クエリがデータベースから 1 行をフェッチするたびにコールバックが呼び出されることを意味します。クエリの結果が 0 の場合、コールバックは呼び出されません。

于 2015-11-23T08:07:33.687 に答える