2017-02-16 4 views
0

私のノードJS Serverに私のモジュールファイルがあります。私のモジュールファイルはDBに接続し、行のリストを取得します。私は、オブジェクトの配列を返す関数をエクスポートしています。基本的に私はDBから得た情報を返すようにして、それを私のメインスクリプトに渡して何かをする。Javascript - エキスパートからのオブジェクトの配列の返却Undefined - NodeJS

だからこれは私のモジュールスクリプトが

どのように見えるかである - mymodule.js -

function smsdcontact(fname, lname, smsdcell, smsdemail) { 
    this.fname = fname; 
    this.lname = lname; 
    this.smsdcell = smsdcell; 
    this.smsdemail = smsdemail; 
} 

var smsdgetlist = function (smsdgroupid) { 


var smsdlist = []; 

connection.connect(); 
connection.query('SELECT * from mymembers', function(err, rows, fields) { 
if (!err) { 
    console.log('The number of rows found are: ', rows.length); 
    for (i = 0; i < rows.length; i++) { 
     smsdlist.push (new smsdcontact(rows[i].memfname,rows[i].memlname,rows[i].memcell,rows[i].mememail)); 
    } 
    connection.end(); 
    console.log(smsdlist); 
    return smsdlist; 
} 
    else 
    console.log('Error while performing Query.'+err); 
}); 
} 

exports.smsdgetlist = smsdgetlist;' 

私の主なスクリプトがその

のようになります - main.js -

var test = require("./smsdsql.js"); 
var returnedarray = test.smsdgetlist("0"); 
console.log(returnedarray) 

出力は次のようになります

- 出力 - まったく同じロジック -

C:\node main.js 
undefined 
The number of rows found are: 2 
[ smsdcontact { 
    fname: ‘user 1 first name', 
    lname: ‘use 1 last name', 
    smsdcell: ‘user 1 cell phone', 
    smsdemail: ‘user 1 email }, 
    smsdcontact { 
    fname: 'user 2 first name'', 
    lname: 'user 2 last name', 
    smsdcell: 'user 2 cell phone', 
    smsdemail: ‘user 2 email' } ] 

だから、問題はそれはリターンが

+0

あなたの出力には、興味深いミックスがあります。一重引用符、二重引用符、字体引用符があります...実際の出力を示す実際のウィンドウからコピーしたことは絶対にありません。 – Tomalak

+0

私は実際のデータをマスクしようとしていたので、@m_callensに余分な引用符があります。 – Joe

+0

出力を変更するのではなく、*データ*を変更して実際のデータをマスクします。 – Tomalak

答えて

1

EDIT Wait until fs.readFileSync is done

重複未定義であることに聞こえるということです。


非同期操作を実行しているため、その結果を変数に割り当てることはできません。あなたにできることはsmsdgetlist関数に、機能だろうcallbackパラメータを追加し、あなたのケース

function smsdgetlist(smsdgroupid, callback){ 
    connection.connect(); 
    connection.query(query, function(err, rows, fields){ 
     for (i = 0; i < rows.length; i++) { 
      smsdlist.push (new smsdcontact(rows[i].memfname,rows[i].memlname,rows[i].memcell,rows[i].mememail)); 
     } 
     // after pushing all elements to desired variable, use the callback 
     connection.end(); 
     callback(smsdlist); 
    }); 
} 

smsdlistになりそして、あなたはmain.jsにどうなるのかは

されるであろう、 resultでそれを呼び出すことです
var test = require("./smsdsql.js"); 
test.smsdgetlist("0", function(result){ 
    console.log(result); // here you would obtain the smsdlist array from smsdgetlist function 
}); 
関連する問題