2016-03-09 57 views
0

我正在使用Node.js與MongoDB和Mongoose進行數據庫連接。會發生的是,如果數據庫中沒有值,那麼回調函數會呈現後續頁面(雖然當然沒有顯示模板期望看到值的地方),但是如果它們是值,我將面臨Press any key to continue...在命令行中。當MongoDB非空時NodeJS站點遇到服務器錯誤

下面是處理該請求一個網頁,應該顯示集合

// GET request for the Blog page. 
exports.g_blog = function (req, res) { 
    var image = req.Image; 

    image.find(function (err, docs) { 
     if (err) return console.error(err); 
     console.log(docs); // Prints the value we save initially 
     res.render('blog', { 
      title : 'Blog', 
      images: docs 
     }); 
    }); 
}; 

在上面的代碼中所有值的路線,Image是一個模式文件中定義的模型的實例。 該定義如下

var ImageSchema = new Schema({ 
    path : String 
}); 

var Image = mongoose.model('Image', ImageSchema); 

所以在GET請求調用image.find應收集,存儲在變量docs

在返回所有的值,我證實,做到了這一點在通過console.log(docs)函數調用的代碼,其中顯示了一個空數組或一個填充數組。在人口衆多的情況下,我遇到了上述消息。在一個空數組中,輸出以下GET請求信息。

下面是我在數據庫查詢的結果集爲空時看到的一個示例。

Empty Array

這裏是一旦我增加了一些價值會發生什麼事的例子。

enter image description here

在此期間,鉻爲約3秒掛機而發生這種情況,然後顯示一個ERR_CONNECTION_REFUSED消息。此外,按提示時按任意鍵只是關閉終端選項卡。

任何幫助?

+0

什麼是'img_collection'改變?在你列出的代碼中沒有提及任何地方,所以你顯然在做別的事情。這不可能是'.find()'產生的問題,因爲你真的記錄了它,但是所有賬戶的'res.render()'調用並不會發生。所以更可能出現問題,和/或前面提到的變量。 –

+0

@BlakesSeven'img_collection'是一個變量,我試圖從全局上下文中保存'docs'值。它沒有工作(並且感覺像不好的練習),所以我放棄了這個想法。它在我的原始源代碼中也被移除了,並且問題仍然以完全相同的行爲持續存在。我更新了我的問題以反映這一點。 – James

+0

簡而言之,您可以給我們背景故事和屏幕截圖,但實際上我們並不需要它們。對發生的事情給出一個清晰和可重複的案例。這給了人們一些合作的東西,並且常常會讓人們誤解實際問題的錯誤概念。您沒有顯示所有重要的代碼。還有像*「試圖保存」的語句*?你什麼意思?我們在這裏看到的只是一個'.find()'請求,沒有理由相信其他任何東西都在範圍之內。給我們一個可重現的案例。所提供的代碼應該在'未定義的變量'上出錯。講清楚。說實話。 –

回答

0

< ================== Mongodb模型代碼======================= ====>

var mongoose = require('mongoose'); 

    var ImageSchema = new mongoose.Schema({ 
     path : String 
    }); 

    module.exports = mongoose.model('Image', ImageSchema); 

< =============代碼路由+功能(image.js文件)============= ==>

var imageModel = require(../pathTo/yourModel.js); 

    module exports = (function() { 

     var ImageApi= express.Router(); 

     image.find(function (err, docs) { 
      if (err) { 
       console.error(err); 
      } 
      else{ 
       console.log(docs); // Prints the value we save initially 
       if(docs.length <=0){ 
        console.log("No records found"); 
        res.render('blog', { 
        title : 'Blog', 
        images: "No Records Found" 
        }); 
       }else{ 
       res.render('blog', { 
        title : 'Blog', 
        images: docs 
       }); 
       } 
      } 
     }); 
     return ImageApi; 
    })(); 

< ==================代碼App.js文件=============== ============>

var imageApi = = require('./routes/image.js'); 

app.use('/image', imageApi); 

我覺得現在應該清除你......在這裏,你的路由必須根據你的文件名和功能

感謝&乾杯

+0

問題不是要求*「如果沒有找到文件,我該如何處理回覆?」,這對於這個問題只是一個不太好的標題。如果仔細閱讀OP的問題,確實與查詢和返回的內容匹配(不是'null'),但之後會發生錯誤。我對這個問題的評論是試圖讓OP暴露'res.render()'調用中使用的變量的來源以及引用的模板。這是他們「崩潰」的原因。所以你誤解了這個問題。另外,請在寫作時不要過度使用** BOLD **。 –

相關問題