如何使用节点js使用mongodb获取多个文档并显示到html页面

时间:2015-09-04 06:36:07

标签: jquery html node.js mongodb

我已经完成了,从mongodb获取数据并使用节点js在html页面上显示它。

问题是它在使用findOne时只显示一个文档。当我使用find时它不显示任何数据。

我需要在我的html文件中进行更改,请建议我。

我的 server.js 文件是

var express = require('express'),
    app = express(),
    cons = require('consolidate'),
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server;

app.engine('html', cons.swig);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');

var mongoclient = new MongoClient(new Server("localhost", 27017));
var db = mongoclient.db('prisync');

app.get('/', function(req, res){

// Find one document in our collection
db.collection('urlinfo').find().toArray(function(err, docs) {

    if(err) throw err;



    res.render('hello', docs);
});
});

app.get('*', function(req, res){
    res.send('Page Not Found', 404);
});



mongoclient.open(function(err, mongoclient) {

    if(err) throw err;

    app.listen(8080);
    console.log('Express server started on port 8080');
});

和我的html文件是

hello.html的

 <body>

        <nav>
<ul>
<li>
  <a href="#" class="button add">Add Product</a>
  <div class="dialog" style="display:none">
  <div class="title">Add Product</div>
  <form action="/search" method="get">
    <input id = "name" name="name" type="text" placeholder="Product Name"/>
    <input name="code" type="text" placeholder="Product Code"/>
    <input name="category" type="text" placeholder=" Category"/>
    <input name="brand" type="text" placeholder="Brand"/>
<input type="submit" value="Ok"/>
  </form>
</div>
</li>
<li class="radio">
  <a href="#" class="button active"></a>

  <a href="#" class="button"></a>

  <a href="#" class="button"></a>
</li>
</ul>
</div>        
</nav>

    <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>

        <script src="js/index.js"></script>


<h1>Hello, {{name}}!</h1>
<h1>Hello, {{code}}!</h1>
<h1>Hello, {{category}}!</h1>


  </body>

2 个答案:

答案 0 :(得分:0)

实际上,当您使用findOne时,它只提供一个docs对象,但是当您使用find方法时,它会为您提供docs对象列表。你应该使用ng-repeat迭代列表,如

    <span ng-repeat="doc in docs">

     <h1>Hello, {{doc.name}}!</h1>
    <h1>Hello, {{doc.code}}!</h1>
    <h1>Hello, {{doc.category}}!</h1> 
</span>

答案 1 :(得分:0)

试试这样..

db.collection('urlinfo').find({}).toArray(function(err, docs) {
   if(err) throw err;
    res.render('hello', {'docs':docs});
   });
});

现在hello.ejs,使用以下代码:

<% for (var d=0;d<docs.length;d++){%>
 <h1><%= docs[d].name %></h1>
 <h1>Hello, <%= docs[d].code} %></h1>
<h1>Hello, <%=docs[d].category %></h1> 
 <% } %>

这可能有用。