雖然以前接觸了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的前端工程師來說,確實是好訊息。因此將其分類為前端,雖有不妥之處,但也湊合。