Node.js笔记(七)读取mongoDB的数据并显示

来源:互联网 发布:永恒之塔数据库 编辑:程序博客网 时间:2024/06/05 16:21

虽然以前接触了mysql的内容,但做网站的时候,感觉NoSQL数据库还是绕不过去。
很多书籍上都提到了node.js和MongoDB的配合使用,这里记录一下学习过程。

MongoDB的基本命令:

use dbname  新建或者使用现有数据库show dbs 显示所有数据库show collections 显示所有collection(表)db.collection.find() 打印表中数据

上述命令在mongo控制台中使用,不能在node.js里直接使用

我们想要把数据库里存放的文章列表取出来显示到页面上,离不开模板引擎,我分别使用了ejs和jade两种引擎,用于比较
关于数据库的管理,可以直接管理也可以使用monk提供的中间件,我会分别贴出来

/**app.js 不使用monk**/var express = require('express');var path = require('path');var jade = require('jade');var fs = require('fs');var mongodb = require("mongodb");var app = express();// view engine setupapp.set('views', path.join(__dirname, 'views'));app.set('view engine', 'jade');// not use monkvar server = new mongodb.Server('localhost',27017,{auto_reconnect:true});  var db = new mongodb.Db("mysite",server,{safe:false});//打开数据库连接db.open(function(err,db){      if(err){          console.log(err);          return false;      }    else        console.log('connect!');});//连接到collectionvar link = function(db){    return function(req,res){    db.collection('usercollection', {safe:true}, function(err, collection){    /*collection方法用于连接现有表,{safe:true} 选项,当collection不存在的时候报错    createCollection方法用于创建新表,{safe:true} 选项,当collection存在的时候报错    */     if(err){         console.log(err);     }     else{         console.log('get collection!');         collection.find().toArray(function(err,docs){         console.log('find');         res.render('userlist',{userlist:docs});         });     }    });    }}app.get('/',link(db));/*关于路由link方法的位置,合适的做法是放在routes/index文件里面,但方法里的依赖项太多,所以还是塞到了一个文件里*/var list = function(){console.log('hah');}var port = 8080;app.listen(port);console.log('Listening on port ' + port);
/*使用monk*/var express = require('express');var path = require('path');var jade = require('jade');var fs = require('fs');var mongodb = require("mongodb");var monk = require('monk');var db = monk('localhost:27017/mysite');var app = express();// view engine setupapp.set('views', path.join(__dirname, 'views'));app.set('view engine', 'jade');var userlist = function(db) {    return function(req, res) {        var collection = db.get('usercollection');        collection.find({},{},function(e,docs){            res.render('userlist', {                "userlist" : docs            });//使用页面引擎渲染        });    };};app.get('/',userlist(db));var list = function(){console.log('hah');}var port = 8080;app.listen(port);console.log('Listening on port ' + port);

可以看出使用monk之后省去了open操作,代码长度也有缩短。

jade和ejs
需要把列表的数据显示在页面上,因此需要页面引擎的渲染
下面是ejs和jade的代码:

/*jade 对缩进控制严格,稍不注意就出错*/extends layoutblock content    h1.        User List    ul        each user, i in userlist            li                a(href="mailto:#{user.email}")= user.username
/*ejs这段模板是在网上找得,还没有试*/<html>  <head>  <title></title>  <style type="text/css">     ul li { list-style: none; width: 200px; padding:5px; background: pink; margin-bottom: 5px;}  </style>  </head>  <body>      <ul>          <% for(i=0; i< userlist.length; i++) {%>             <li><a><%= userlist[i].username %></a></li>          <% } %>  [html] view plaincopyprint?        </yk>  </body>  </html>

————————————————————————
关于nodejs文章的分类,想一想既不能算是前端,也不能算传统的后端。
但nodejs的出现,对确实是熟悉javascript的前端工程师来说,确实是好消息。因此将其分类为前端,虽有不妥之处,但也凑合。

0 0
原创粉丝点击