Node.js操作mongodb數據庫
準備:安裝Node.js,mongodb,mongoose,webstorm
這里我采用的是mongoose來處理的。Mongoose是MongoDB的一個對象模型工具,可以工作于異步環境下。具體學習內容參看官網http://mongoosejs.com/docs/index.html
1、開始運用mongoose時,得先安裝,打開命令行,執行$ npm install mongoose
2、連接mongodb數據庫,在app.js里面添加如下兩行代碼。
var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); //連接到一個test的數據庫操作到這里基本上是個人都會,不過接下來具體如何進行數據庫的操作,在沒有實例的情況下還是有點糾結的。我這里以一個登錄注冊為例來說明如何使用。
3、用webstorm創建一個新的Express App項目,這樣就直接封裝好了express(),省去了自己寫的麻煩。然后修改app.js如下:
/** * Module dependencies. */ var express = require('express') , routes = require('./routes') , user = require('./routes/user') , http = require('http') , path = require('path') , mongoose = require('mongoose'); //1 var app = express(); // all environments app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/', routes.index); app.get('/log',routes.login); app.post('/log',routes.doLogin); app.get('/reg',routes.reg); app.post('/reg',routes.doReg); //mongoose mongoose.connect('mongodb://localhost/test_db'); //2 http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });
4、接下來定義一下Schema和Model,這些就是數據庫表的結構。在項目根路徑下創建一個models的文件夾,里面添加一個user.js用來定義用戶表。models/user.js代碼如下。
var mongoose = require('mongoose') , Schema = mongoose.Schema , ObjectId = Schema.ObjectId; var UserSchema = new Schema({ name: String , password: String }); module.exports = mongoose.model('User', UserSchema);注意最后一行,這里是直接把UserSchema的Model給導出去了,也可以直接導出UserSchema,module.exports = UserSchema,不過這樣做的話,再用這個表信息的時候就得單獨Model一下。
5、引入mongoose后,自己添加相應的文件,在view里新建登錄注冊頁,頭部底部這些包含文件也都自己建。先說注冊頁,表單處理路徑為/reg。注意用戶名密碼的輸入框我是直接用name="user[]"這種形式,這樣后面可以直接通過這個user來獲取相關信息,其實不這樣也可以。
<% include header.ejs %> <form action="/reg" method="post"> <input type="text" name="user[name]" /> <input type="password" name="user[password]" /> <input type="submit" value="Register" /> </form> <% include footer.ejs %>接下來修改doReg方法,這是處理注冊事件的函數。
6、修改index.js,因為想在這里注冊時候把數據存入到數據庫中,所以這里需要引用上面第四步創建的model。具體代碼如下所示。
var User = require('../models/user'); /* * GET home page. */ exports.index = function(req, res){ User.find({}, function (err,users) { res.render('index', { title: 'Express',users:users }); }); }; exports.reg=function(req,res){ res.render('reg',{title:'Register Page'}); }; exports.doReg=function(req,res){ var user = new User(req.body.user); user.save(function (err, user) { if(!err) { console.log(user); res.redirect('/') } }); console.log(req.body.user); };這一步要注意為什么是req.body.user,這里就是前面寫頁面直接用user[]這種形式帶來的好處,如果單獨寫name="username",那么這里就應該是下面這種形式。
var user = new User({ name:req.body['username'], password:req.body['password'] });user.save就是把剛才數據提交到數據庫,具體使用方法參看官方文檔。save成功之后執行什么操作就自己發揮吧。保存之前也可以進行一些簡單的表單驗證等等。
7、通過登錄來講如何從數據庫取出數據,繼續修改index.js,如下所示。
var User = require('../models/user'); /* * GET home page. */ exports.index = function(req, res){ User.find({}, function (err,users) { res.render('index', { title: 'Express',users:users }); }); }; exports.login=function(req,res){ res.render('log',{title:'Login Page'}); } ; exports.doLogin=function(req,res){ var user = req.body.user; User.find(user,function(err,docs){ if(!err){ if(docs!=''){ console.log(docs); return res.redirect('/'); } else{ console.log('用戶名或密碼不正確'); return res.redirect('/log'); } }else{ console.log("Something happend."); } }) }; exports.reg=function(req,res){ res.render('reg',{title:'Register Page'}); }; exports.doReg=function(req,res){ var user = new User(req.body.user); user.save(function (err, user) { if(!err) { console.log(user); res.redirect('/') } }); console.log(req.body.user); };這里通過find()方法來查詢數據庫,使用方法不解釋了。第一個參數user就是要查詢的數據,從輸入框獲取過來的,如果不是用user[]這種形式定義的name屬性,那么這里一樣的用{naem:req.body['username'],password:req.body['password']}這樣的寫法。回調函數docs就是從數據庫查詢返回的結果。
例子到此結束。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!