2014-11-06 115 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输出。