分享

Node.js操作mongodb数据库

 风声之家 2015-05-09
http://blog.csdn.net/zk437092645/article/details/9330931

准备:安装Node.js,mongodb,mongoose,webstorm

这里我采用的是mongoose来处理的。Mongoose是MongoDB的一个对象模型工具,可以工作于异步环境下。具体学习内容参看官网http:///docs/index.html

1、开始运用mongoose时,得先安装,打开命令行,执行$ npm install mongoose

2、连接mongodb数据库,在app.js里面添加如下两行代码。

[javascript] view plaincopy
  1. var mongoose = require('mongoose');  
  2. mongoose.connect('mongodb://localhost/test'); //连接到一个test的数据库  
操作到这里基本上是个人都会,不过接下来具体如何进行数据库的操作,在没有实例的情况下还是有点纠结的。我这里以一个登录注册为例来说明如何使用。

3、用webstorm创建一个新的Express App项目,这样就直接封装好了express(),省去了自己写的麻烦。然后修改app.js如下:

[javascript] view plaincopy
  1. /** 
  2.  * Module dependencies. 
  3.  */  
  4.   
  5. var express = require('express')  
  6.   , routes = require('./routes')  
  7.   , user = require('./routes/user')  
  8.   , http = require('http')  
  9.   , path = require('path')  
  10.   , mongoose = require('mongoose');   //1  
  11.   
  12.   
  13. var app = express();  
  14.   
  15.   
  16. // all environments  
  17. app.set('port', process.env.PORT || 3000);  
  18. app.set('views', __dirname + '/views');  
  19. app.set('view engine''ejs');  
  20. app.use(express.favicon());  
  21. app.use(express.logger('dev'));  
  22. app.use(express.bodyParser());  
  23. app.use(express.methodOverride());  
  24. app.use(app.router);  
  25. app.use(express.static(path.join(__dirname, 'public')));  
  26.   
  27.   
  28. // development only  
  29. if ('development' == app.get('env')) {  
  30.   app.use(express.errorHandler());  
  31. }  
  32.   
  33.   
  34. app.get('/', routes.index);  
  35. app.get('/log',routes.login);  
  36. app.post('/log',routes.doLogin);  
  37. app.get('/reg',routes.reg);  
  38. app.post('/reg',routes.doReg);  
  39.   
  40.   
  41. //mongoose  
  42. mongoose.connect('mongodb://localhost/test_db');  //2  
  43.   
  44.   
  45. http.createServer(app).listen(app.get('port'), function(){  
  46.   console.log('Express server listening on port ' + app.get('port'));  
  47. });  

4、接下来定义一下Schema和Model,这些就是数据库表的结构。在项目根路径下创建一个models的文件夹,里面添加一个user.js用来定义用户表。models/user.js代码如下。

[javascript] view plaincopy
  1. var mongoose = require('mongoose')  
  2.     , Schema = mongoose.Schema  
  3.     , ObjectId = Schema.ObjectId;  
  4.   
  5. var UserSchema = new Schema({  
  6.       name: String  
  7.     , password: String  
  8. });  
  9.   
  10. module.exports = mongoose.model('User', UserSchema);  
注意最后一行,这里是直接把UserSchema的Model给导出去了,也可以直接导出UserSchema,module.exports = UserSchema,不过这样做的话,再用这个表信息的时候就得单独Model一下。

5、引入mongoose后,自己添加相应的文件,在view里新建登录注册页,头部底部这些包含文件也都自己建。先说注册页,表单处理路径为/reg。注意用户名密码的输入框我是直接用name="user[]"这种形式,这样后面可以直接通过这个user来获取相关信息,其实不这样也可以。

[javascript] view plaincopy
  1. <% include header.ejs %>  
  2. <form action="/reg" method="post">  
  3. <input type="text" name="user[name]" />  
  4. <input type="password" name="user[password]" />  
  5. <input type="submit" value="Register" />  
  6. </form>  
  7. <% include footer.ejs %>  
接下来修改doReg方法,这是处理注册事件的函数。

6、修改index.js,因为想在这里注册时候把数据存入到数据库中,所以这里需要引用上面第四步创建的model。具体代码如下所示。

[javascript] view plaincopy
  1. var User = require('../models/user');  
  2. /* 
  3.  * GET home page. 
  4.  */  
  5.   
  6.   
  7. exports.index = function(req, res){  
  8.   User.find({}, function (err,users) {  
  9.       res.render('index', { title: 'Express',users:users });  
  10.   });  
  11. };  
  12.   
  13. exports.reg=function(req,res){  
  14.     res.render('reg',{title:'Register Page'});  
  15. };  
  16. exports.doReg=function(req,res){  
  17.     var user = new User(req.body.user);  
  18.     user.save(function (err, user) {  
  19.         if(!err) {  
  20.             console.log(user);  
  21.             res.redirect('/')  
  22.         }  
  23.     });  
  24.     console.log(req.body.user);  
  25. };  
这一步要注意为什么是req.body.user,这里就是前面写页面直接用user[]这种形式带来的好处,如果单独写name="username",那么这里就应该是下面这种形式。
[javascript] view plaincopy
  1. var user = new User({  
  2.     name:req.body['username'],  
  3.     password:req.body['password']  
  4. });  
user.save就是把刚才数据提交到数据库,具体使用方法参看官方文档。save成功之后执行什么操作就自己发挥吧。保存之前也可以进行一些简单的表单验证等等。

7、通过登录来讲如何从数据库取出数据,继续修改index.js,如下所示。

[javascript] view plaincopy
  1. var User = require('../models/user');  
  2. /* 
  3.  * GET home page. 
  4.  */  
  5.   
  6. exports.index = function(req, res){  
  7.   User.find({}, function (err,users) {  
  8.       res.render('index', { title: 'Express',users:users });  
  9.   });  
  10. };  
  11. exports.login=function(req,res){  
  12.     res.render('log',{title:'Login Page'});  
  13. } ;  
  14. exports.doLogin=function(req,res){  
  15.     var user = req.body.user;  
  16.     User.find(user,function(err,docs){  
  17.         if(!err){  
  18.             if(docs!=''){  
  19.                 console.log(docs);                  
  20.                 return res.redirect('/');  
  21.             } else{  
  22.                 console.log('用户名或密码不正确');  
  23.                 return res.redirect('/log');  
  24.             }  
  25.   
  26.         }else{  
  27.             console.log("Something happend.");  
  28.         }  
  29.     })  
  30. };  
  31. exports.reg=function(req,res){  
  32.     res.render('reg',{title:'Register Page'});  
  33. };  
  34. exports.doReg=function(req,res){  
  35.     var user = new User(req.body.user);  
  36.     user.save(function (err, user) {  
  37.         if(!err) {  
  38.             console.log(user);  
  39.             res.redirect('/')  
  40.         }  
  41.     });  
  42.     console.log(req.body.user);  
  43. };  
这里通过find()方法来查询数据库,使用方法不解释了。第一个参数user就是要查询的数据,从输入框获取过来的,如果不是用user[]这种形式定义的name属性,那么这里一样的用{naem:req.body['username'],password:req.body['password']}这样的写法。回调函数docs就是从数据库查询返回的结果。

例子到此结束。


-------------------------



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多