当前位置: 首页 > 工具软件 > Monk.Node > 使用案例 >

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

越季萌
2023-12-01

虽然以前接触了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 setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// not use monk
var 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!');
});
//连接到collection
var 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 setup
app.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 layout
block 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的前端工程师来说,确实是好消息。因此将其分类为前端,虽有不妥之处,但也凑合。

 类似资料: