2014-02-17 143 views
0

我目前正試圖讓用戶使用Mongoose,但是當我嘗試將函數移動到單獨的模塊時,它會引發一些不很有用的錯誤。所以一些介紹:用貓鼬檢索數據

如果我在控制器中使用這樣的:

exports.index2 = function(req, res) { 
Users.find(function(err, users){ 
    if (err){ 
     console.log("ERR"); 
    } 
    console.log(users); 
    res.json(users); 
});}; 

一切工作正常,但是當我試圖像這樣分開,這是行不通的。

exports.index = function(req, res) { 
    UsersModel.findAll(function(users, err){ 
     if (!err){ 
      console.log(users); <--- this is not showing 
      res.send(users); 
     }else 
      console.log(err); 
    }); 
}; 

//這是在型號,這是在控制器

findAll: function() { 
    User.find(function(err, users){ 
     if (err){ 
      console.log("ERR"); 
     } 
     //console.log(users); <--- this is showing 
     return users; 
    }); 
}, 

我越來越不確定的要求,因爲我試圖運行的findAll同步和異步沒有。在「照顧」這個之後,undefined消失了,但它仍然不起作用。

回答

1

首先,你傳遞一個回調函數到的findAll()函數...

UsersModel.findAll(function(users, err){ ... }) 

...但的findAll()方法不會利用這個回調返回任何值。基於它是如何被消耗,可以預計沿着這些路線被定義更多:

findAll: function(callback) { 
    User.find(function(err, users){ 
     callback(err, users); 
    }); 
} 

此外,您在第二個例子分支是這樣的,有當響應永遠不會發送路徑:

exports.index = function(req, res) { 
    UsersModel.findAll(function(users, err){ 
     if (!err){ 
      console.log(users); <--- this is not showing 
      res.send(users); 
     }else 
      console.log(err); 
    }); 
}; 

與你的第一個例子不同,函數的res.send的唯一調用是在成功的情況下進行的。所以,如果出現錯誤,您將記錄它,然後該函數退出,並且客戶端永遠不會發送響應(至少不會由此處理程序)。

基本上,你遇到的問題是管理回調。如果您有興趣,請在JavaScript回調模式中使用a good resource

乾杯。