2014-11-06 119 views
1

我一直在關注this tutorial試圖讓mongodb node.js,express和jade一起工作,但是我不能讓我的生活讓程序訪問來自數據庫。Node.js連接到一個mongodb

這裏是應該訪問數據庫的app.js中的代碼。

var mongo = require('mongodb'); 
var monk = require('monk'); 
var db = monk('localhost:27017/nodetest1'); 
....a few lines down.... 
app.use(function(req,res,next){ 
    req.db = db; 
    next(); 
}); 

這裏是代碼處理路線:

/* GET Userlist page. */ 
router.get('/userlist', function(req, res) { 
    var db = req.db; 
    var collection = db.get('usercollection'); 
    collection.find({},{},function(e,docs){ 
     res.render('userlist', { 
      "userlist" : docs 
     }); 
    }); 
}); 

這裏是在userlist.jade代碼:它的目的是純粹弄清楚用戶列表的內容。它應該包含數據庫中的信息(其中有3個條目,每條數據包含2個數據)。我從網上的例子中得到了其他的玉代碼,它基本上只是一個'Hello World'程序。

doctype html 
html(lang="en") 
    head 
    title= pageTitle 
    body 
    #{userlist} 

頁輸出到這一點:

<[object Object],[object Object],[object Object]> 

這就解釋了爲什麼我得到的錯誤,通過數據,循環但我需要越來越節目真正得到正確的信息幫助數據庫。

其他信息: 我可以通過命令提示符訪問數據庫並查看我放入的數據。 我正在使用Windows 8.1

更新:使它工作的代碼!

index.js(路由處理):

/* GET Userlist page. */ 
router.get('/userlist', function(req, res) { 
    var db = req.db; 
    var collection = db.get('usercollection'); 
    collection.find({},{},function(e,docs){ 
     res.render('userlist', { 
      "userlist" : docs 
     }); 
    }); 
}); 

userlist.jade

extends layout 

block content 
    h1. 
     User List 
    ul 
     each user, i in userlist 
      li 
       a(href="mailto:#{user.email}")= user.username 

我不知道確切原因,因爲我做了很多的測試,以確保這是現在的工作我發送了正確的數據,其中包括從教程中複製和粘貼代碼,但現在它可以工作!

編輯:我通過確認它實際上是從服務器拉取數據更接近的解決方案,只是測試它與本教程驗證,我應該使用的代碼,它現在正常工作。增加了正確的代碼

+1

看起來您正在重新編制數據庫中的三個值。你需要'JSON.stringify'它們。 (或類似的) – user949300 2014-11-06 23:39:29

+1

本教程的+1。 – shmuli 2014-11-06 23:46:26

+0

好吧,我用JSON.stringify,我可以確認它將所有數據從數據庫中提取出來,但我仍然沒有得到它來正確顯示它,但沒有錯誤消息。我對我的代碼進行編輯 – bs7280 2014-11-06 23:48:10

回答

1

我相信你會得到這個輸出,因爲回調中的文檔是一個數組。你可以通過文檔循環,並將單個文檔打印到控制檯?這將驗證數據訪問部分是否正常工作,然後您可以計算出HTML輸出。