使用nodejs操作mongodb來實現增刪改查
阿新 • • 發佈:2018-12-24
本文主要講解使用nodejs操作mongodb,並使用express實現增刪改查
本地環境 win7 nodejs v0.10.29 express 4.9.0 mongodb2.4.10
文章末尾有本工程的下載連結,初學者可以學習,高手請忽略
效果圖
本地環境 win7 nodejs v0.10.29 express 4.9.0 mongodb2.4.10
文章末尾有本工程的下載連結,初學者可以學習,高手請忽略
使用express建立一個todo的express工程
修改package.json,在dependencies下面新增"mongoose":">= 2.3.1"
我本地修改後的package.json
{ "name": "todo", "version": "0.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "express": "~4.9.0", "body-parser": "~1.8.1", "cookie-parser": "~1.3.3", "morgan": "~1.3.0", "serve-favicon": "~2.1.3", "debug": "~2.0.0", "jade": "~1.6.0", "mongoose":">= 2.3.1" } }
關鍵程式碼tasks.js
var express = require('express'); var router = express.Router(); var mongo = require('mongoose'); /* 連線本地mongodb */ mongo.connect("mongodb://127.0.0.1:27017/test",function(err){ if(!err){ console.log("connected to Mongodb"); }else{ throw err; } }); var Schema = mongo.Schema, ObjectId = Schema.ObjectId; var Task = new Schema({ task:{type: String} }); /*指定 mongodb 文件的type,為新增用 此處新增實際的文件名稱問 db.task2 之前我就混淆了 */ var TaskModel = mongo.model("task2",Task); /*指定 mongodb 文件的type,查詢用 此處查詢實際的文件名稱問 db.task2 */ var TaskQuery = mongo.model("task2"); /* task首頁,執行了 db.task2.find() 將結果展示在首頁 */ router.get('/', function(req, res) { TaskQuery.find({},function(err,docs){ console.log(docs); res.render('tasks.jade',{title:'Todo Task Page',docs:docs}); }); }); /* 新建task */ router.get('/new', function(req, res) { res.render('newtask.jade',{title:'New Task Page'}); }); /* 新增task表單提交請求 */ router.post("/add.do",function(req,res){ var blog1 = new TaskModel(); blog1.task=req.body.task; blog1.save(function(err){ if (err) { console.log('save failed'); return; } res.redirect("/tasks") ; }); }); /* 編輯,查詢資料並返回到頁面 */ router.get('/edit/:id', function(req, res) { TaskQuery.findById(req.params.id,function(err,doc){ res.render('edittask.jade',{title:'Todo Task Page',task:doc}); }); }); /* 編輯表單提交請求 */ router.post("/edit.do/:id",function(req,res){ TaskQuery.findById(req.params.id,function(err,doc){ doc.task = req.body.task; doc.save(function(err){ if(!err){ res.redirect("/tasks") ; }else{ throw err; } }); }); }); /* 刪除請求 */ router.get("/delete/:id",function(req,res){ console.log(req.params.id); TaskQuery.findById(req.params.id,function(err,doc){ if(!doc){ return next(new NotFound("Doc not found")) }else{ doc.remove(function(){ res.redirect("/tasks"); }) } }); }); module.exports = router;
效果圖
筆者在剛做新增操作的時候(按照書上的例子),遇到了_id不能為空等等問題,google了半天沒有解決
後來換了這種方式,就解決了。
這個是Windows下的MongoDB客戶端MongoVUE 這是最後一個全功能的不收費的版本。