2017-02-16 34 views
0

在我的節點JS服務器我有我的模塊文件。我的模塊文件連接到一個數據庫,並拉出一個行列表。我正在導出一個返回對象數組的函數。基本上我會反饋我從數據庫中獲得的信息,並將它傳回給我的主腳本來處理它。Javascript - 從專家返回的對象數組給予未定義 - 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

通過更改* data *而不是通過更改輸出來掩蓋實際數據。 – Tomalak

回答

1

編輯

Wait until fs.readFileSync is done複製 - 完全一樣的邏輯。


您正在執行異步操作,因此您不能只將它的結果賦值給變量。你可以做的是添加callback參數,這將是一個功能,smsdgetlist功能,並與result調用它,這將是smsdlist你的情況

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); 
    }); 
} 

而且你會在main.js怎麼做纔對

var test = require("./smsdsql.js"); 
test.smsdgetlist("0", function(result){ 
    console.log(result); // here you would obtain the smsdlist array from smsdgetlist function 
});