虽然以前接触了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的前端工程师来说,确实是好消息。因此将其分类为前端,虽有不妥之处,但也凑合。