1

accountManager.js というモジュールを書きました

var sqlite3 = require('sqlite3');

var db = new sqlite3.Database("./users.db");

exports.userExists = function userExists(nickName) {
    var stmt = 'SELECT * FROM users WHERE login="' + nickName + '"';
    db.each(stmt,function(err,row) {
        if(row) {
            if(row.login==nickName) return true;
            else return false;
        }
    });
}

メインの app.js ファイルに

var accountManager = require('./lib/accountManager');
console.log(accountManager.userExists('user1'));

このアプリはコンソールに「未定義」と表示されます...モジュールが正常に動作していることを確認しましたが、コールバックに問題があると思いますか? このコードの何が問題なのかわかりません...

4

2 に答える 2

0

からのコールバック内から値を返していますdb.each。ただし、この値は外部関数 ( ) によって返されませんuserExists。これは、渡された関数がdb.each呼び出される前に返される可能性があります。

userExists次のように、関数にコールバックを提供することができます。

exports.userExists = function (nickName, cb) {
    var stmt = 'SELECT * FROM users WHERE login="' + nickName + '"';
    var found=false;
    db.each(stmt,function(err,row) {
        if(row) {
            if(row.login==nickName) {
                found=true;
                cb(true);
            }
        }
    }, function () {
        if (!found) {
            cb(false);
        }
    });
}

次に、次のように呼び出します。

 var accountManager = require('./lib/accountManager');
 accountManager.userExists('user1', function (found) {
     console.log(found);
 });
于 2013-05-18T20:47:25.720 に答える