Node.js筆記(七)讀取mongoDB的資料並顯示
阿新 • • 發佈:2019-02-18
雖然以前接觸了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的前端工程師來說,確實是好訊息。因此將其分類為前端,雖有不妥之處,但也湊合。