2015-09-09 87 views
0

我拉我的頭髮...這個功能工作完美,直到昨天晚上...我沒有做任何改變的底層代碼,它似乎有隻是隨機辭掉工作。下面的代碼:Node.JS Mongoose:.find()未定義

var KeyWord = require('./word');  

console.log(KeyWord);     // returns {} 

KeyWord.find().select('_id').exec(function(err, result) { 
     if (err) { 
      console.log("error getting word"); 
     } else { 
      console.log("Found"); 
    } 
    }); 

下面是關鍵字對象

var mongoose = require('mongoose'); 
var Account = require('./account'); 
var ObjectId = mongoose.Schema.Types.ObjectId; 

var KeyWordSchema = new mongoose.Schema({ 
    chinese: String, 
    english: [String], 
    pinyin: [String], 
    tone: Number, 
    count: Number 
}); 



var KeyWord = mongoose.model('KeyWord', KeyWordSchema); 

module.exports = KeyWord; 

的錯誤我得到的回覆是:

KeyWord.find().select('_id').exec(function(err, result) { 
     ^
    TypeError: undefined is not a function 

我跑的代碼的最高位在我的index.js並工作,印刷「找到」。 word.js文件和運行該函數的文件位於同一個文件夾中。

+0

而且,所有這些代碼在同一個js文件?如果不是,你如何獲得'KeyWord'到第一個片段? –

+0

不,它不是同一個文件。我正在導入關鍵字(對不起,忘記包含) - 導入工作。我已經打印貓鼬和KeyWord,並沒有被列爲未定義。我還嘗試了其他模型函數,如save和findOne,並且它們都被列爲未定義的函數。 –

+0

對我來說,聽起來像'KeyWord'不是你的第一個片段中的貓鼬模型,這將暗示它被導入或導出不正確。它看起來像你正在導出它,這導致你沒有包括的導入步驟。 –

回答

1

我懷疑這是一個循環引用。你的模型是否導入了你想要導入的文件?

當你在文件中檢查KeyWord時,你試圖運行.find()..是否KeyWord返回一個空對象{}

如果我是正確的,當你這樣做:

var KeyWord = require('/path/to/model/file') 
console.log(KeyWord) 

輸出應顯示{},而不是像[object Object]

+0

它確實給了我一個'{}'!我在它們兩個中導入相同的文件,並且該文件需要上面列出的兩個文件...也許是這樣做的。謝謝! –

-1

這是因爲關鍵字是不確定的。首先,你必須調用KeyWord.find().select('_id')

改變這樣的代碼之前創建關鍵字變量:

var KeyWord = require('./models/KeyWord');//Your path to KeyWord schema file here 

KeyWord.find().select('_id').exec(function(err, result) { 
    if (err) { 
     console.log("error getting word"); 
    } else { 
     console.log("Found"); 
    } 
}); 
+0

如果'KeyWord'沒有定義,錯誤信息會非常不同。 'ReferenceError:關鍵字未定義' –