1. 程式人生 > >使用nodejs操作mongodb來實現增刪改查

使用nodejs操作mongodb來實現增刪改查

本文主要講解使用nodejs操作mongodb,並使用express實現增刪改查
本地環境  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 這是最後一個全功能的不收費的版本。