1.express链接mongocss
链接mongo,nodejs最接近原始api的模块就是mongodbhtml
在package.json加入依赖,修改后以下:node
{ "name": "application-name", "version": "0.0.1", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "express": "~3.4.8", "static-favicon": "~1.0.0", "morgan": "~1.0.0", "cookie-parser": "~1.0.1", "body-parser": "~1.0.0", "debug": "~0.7.4", "ejs": "~0.8.5", "formidable": "*", "mongodb":"*" } }
咱们执行 npm install安装依赖,请耐心等待完成。git
咱们显示咱们已经建立的集合内容。github
index.js路由文件,顶部加入:mongodb
var mongodb = require("mongodb") ;
请求到了mongodb模块。数据库
咱们修改首页路由处理,显示咱们的数据:express
app.get('/',function(req, res){ var server = new mongodb.Server("localhost",27017,{ auto_reconnect : true }) ; var conn = new mongodb.Db("blogme",server,{ safe : true }) ; conn.open(function(error,db){ if(error) throw error ; db.collection("news",{ safe : true },function(err,collection){ if(err) throw err ; collection.find().toArray(function(e,result){ if(e) throw e ; res.render('index', { title: 'Express',hello: 'hello world!',arr: result }); }) ; }) ; }) ; });
这个几乎是固定写法,这个很好理解吧,数据库在本地,mongo的端口是27017,连接的数据库和blogmenpm
如今变量db就是咱们的数据库blogme了。json
db表明blogme数据库,咱们选择集合news,而后查找,没指定就是查找全部,而后转为数组形式:[{},{},{}]如此形式。。。。。。
咱们修改index.html模板页面,用来显示咱们的数据库数据:
<!DOCTYPE html> <html> <head> <title><%= title %></title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= title %></h1> <p>Welcome to <%= title %></p> <p><a href="/hello"><%= hello %></a></p> <ul> <% for(var i=0; i<arr.length; i++) {%> <li><a href="/list"><%= arr[i].title %></a><span><%= arr[i].text %></span></li> <% } %> </ul> </body> </html>
再循环哪里不会看不懂吧,数据是[{},{},{}]。咱们循环数组后arr[index]就是每条数据,咱们.下标就是显示记录下字段内容。
运行,咱们查看首页内容:
咱们看另外一种实现方式,mongodb的api很接近mongo的api,用起来比较麻烦,咱们使用mongoskin链接数据库。
mongoskin介绍地址:https://github.com/kissjs/node-mongoskin
咱们在json加入mongoskin依赖:
{ "name": "application-name", "version": "0.0.1", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "express": "~3.4.8", "static-favicon": "~1.0.0", "morgan": "~1.0.0", "cookie-parser": "~1.0.1", "body-parser": "~1.0.0", "debug": "~0.7.4", "ejs": "~0.8.5", "formidable": "*", "mongodb":"*", "mongoskin":"*" } }
执行npm start 加载完成便可。
咱们在index.js路由文件引入mongoskin模块,按照介绍页面给的实例便可:
var mongo = require('mongoskin'); var db = mongo.db("mongodb://localhost:27017/blogme", {native_parser:true});
稍做修改,链接blogme数据库,咱们首页路由修改:
app.get('/',function(req, res){ db.bind('news'); db.news.find().toArray(function(err, items) { if (err) throw err; res.render('index', { title: 'Express',hello: 'hello world!',arr: items }); db.close(); }); });
找到集合,而后对集合操做输出,对比咱们的mongodb使用,代码简洁的多得多。
咱们预览效果同使用mongodb同样,此时删除mongodb模块的引入。
2.数据模型的分离
咱们的index.js做为路由处理,在mvc是c处理,咱们在这个文件里请求数据库和显示数据代码放在一块儿让程序显得很混乱,咱们如同在app.js把路由拿出同样,把数据的访问也拿出去,在路由页面只接受到数据就能够了。
咱们blogme目录建立 model文件夹,下面建立model.js文件
model和router等同级。
咱们开始编辑model.js文件,用来返回数据:
var mongo = require('mongoskin'); var db = mongo.db("mongodb://localhost:27017/blogme", {native_parser:true}); function model_index(callback){ db.bind('news'); db.news.find().toArray(function(err, items) { if (err) throw err; callback(items); db.close(); }); }; exports.model_index=model_index;
在这个页面,咱们会打开数据库,将数据返回到回调中,咱们修改index.js路由,
咱们先要获取model.js文件:
var model = require('../model/model');
首页路由修改:
app.get('/',function(req, res){ model.model_index(function(items){ res.render('index', { title: 'Express',hello: 'hello world!',arr: items }); }); });
调用model的方法,定义回调处理,咱们运行,发现同之前。
咱们在model.js里面对数据库有不少连接信息,model.js随后会不断加入返回数据处理,代码会不断增多,还有就是数据库名称这些信息有时候要修改的,为了方便,咱们把这些提出,在model目录下建立config.js存放这个数据局链接信息:
var connect="mongodb://localhost:27017/blogme"; exports.connect=connect;
model.js修改:
var config = require('./config'); var mongo = require('mongoskin'); var db = mongo.db(config.connect, {native_parser:true}); function model_index(callback){ db.bind('news'); db.news.find().toArray(function(err, items) { if (err) throw err; callback(items); db.close(); }); }; exports.model_index=model_index;
运行,预览。
咱们在model.js此次加peoples集合的返回,显示在/hello页面里:
model.js加入代码:
var config = require('./config'); var mongo = require('mongoskin'); var db = mongo.db(config.connect, {native_parser:true}); function model_index(callback){ db.bind('news'); db.news.find().toArray(function(err, items) { if (err) throw err; callback(items); db.close(); }); }; function model_hello(callback){ db.bind('peoples'); db.peoples.find().toArray(function(err, items) { if (err) throw err; callback(items); db.close(); }); }; exports.model_index=model_index; exports.model_hello=model_hello;
路由index.js对/hello作修改显示:
app.get('/hello', function(req, res){ model.model_hello(function(items){ res.render('hello', { arr: items }); }); });
模板hello.html修改:
<!DOCTYPE html> <html> <head> <title>hello</title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <ul> <% for(var i=0; i<arr.length; i++) {%> <li><span><%= arr[i].name %></span></li> <% } %> </ul> </body> </html>
运行,预览首页:
点击进入hello页面:
与数据库集合相符,咱们回头看model.js
每次加入数据处理都要定义一次,非常麻烦,咱们修改模式,采用单例处理:
var config = require('./config'); var mongo = require('mongoskin'); var db = mongo.db(config.connect, {native_parser:true}); var model={}; model.model_index=function(callback){ db.bind('news'); db.news.find().toArray(function(err, items) { if (err) throw err; callback(items); db.close(); }); }; model.model_hello=function(callback){ db.bind('peoples'); db.peoples.find().toArray(function(err, items) { if (err) throw err; callback(items); db.close(); }); }; module.exports=model;
咱们每次只要挂在model对象下就能够了。
写在expores和module.exports下的区别能够百度查看,exports是module的一个属性。
总结:
首先使用了mongodb模块的数据显示;
接下来采用了mongoskin模块;
index.js代码:修改,引入model模块和处理
var formidable = require('formidable'); var fs = require('fs'); var crypto = require('crypto'); var model = require('../model/model'); function rout(app){ app.get('/',function(req, res){ model.model_index(function(items){ res.render('index', { title: 'Express',hello: 'hello world!',arr: items }); }); }); app.get('/hello', function(req, res){ model.model_hello(function(items){ res.render('hello', { arr: items }); }); }); app.get('/list', function(req, res){ res.render('list', { text: req.query.id }); }); app.get('/login', function(req, res){ res.render('login'); }); app.post('/logincheck', function(req, res){ var user= req.body.user; var pass= req.body.pass; if(user=="tom" && pass=="tom"){ res.redirect('/'); }else{ res.redirect('/login'); }; }); app.get('/file', function(req, res){ res.render('file'); }); app.post('/upfile', function(req, res){ //code var form = new formidable.IncomingForm(); form.uploadDir = "./upload"; form.parse(req, function(err, fields, files) { if (err) { res.redirect('/file'); } var tmp_path, target_path; if (files.file.size > 0) { //表示有文件上传 tmp_path = files.file.path;//内存中的文件,当前文件目录 var picType = files.file.name.split(".")[1];//后缀名 //移动目的目录 target_path = './public/images/pic_1.' + picType; //同步方式移动文件 fs.renameSync(tmp_path, target_path); }else{ res.redirect('/file'); }; }); }); app.get('/fs', function(req, res){ fs.writeFile('./fs/me/1.txt', 'read me','utf8', function (err) { if (err) throw err; }); }); app.get('/crypto', function(req, res){ var pass="admin"; var md5 = crypto.createHash('md5'); var mpass=md5.update(pass).digest('hex'); var rmpass=mpass.substring(2); res.render('crypto', { res:pass,resm:mpass,resrm:rmpass }); }); app.get('/globals', function(req, res){ res.render('globals', { res:__dirname+":"+__filename }); }); }; exports.rout=rout;
model.js 新增在model目录下
var config = require('./config'); var mongo = require('mongoskin'); var db = mongo.db(config.connect, {native_parser:true}); var model={}; model.model_index=function(callback){ db.bind('news'); db.news.find().toArray(function(err, items) { if (err) throw err; callback(items); db.close(); }); }; model.model_hello=function(callback){ db.bind('peoples'); db.peoples.find().toArray(function(err, items) { if (err) throw err; callback(items); db.close(); }); }; module.exports=model;
config.js
var connect="mongodb://localhost:27017/blogme"; exports.connect=connect;
index.html 修改显示数据库内容
<!DOCTYPE html> <html> <head> <title><%= title %></title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= title %></h1> <p>Welcome to <%= title %></p> <p><a href="/hello"><%= hello %></a></p> <ul> <% for(var i=0; i<arr.length; i++) {%> <li><a href="/list"><%= arr[i].title %></a><span><%= arr[i].text %></span></li> <% } %> </ul> </body> </html>
hello.html
<!DOCTYPE html> <html> <head> <title>hello</title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <ul> <% for(var i=0; i<arr.length; i++) {%> <li><span><%= arr[i].name %></span></li> <% } %> </ul> </body> </html>