您的位置:首页 > 数据库 > Mongodb

使用nodejs操作mongodb来实现增删改查

2014-10-10 11:37 686 查看
本文主要讲解使用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了半天没有解决

后来换了这种方式,就解决了。

本文工程下载地址:http://download.csdn.net/detail/wang_situ/8020545

顺便附上一个mongodbVUE的下载地址:http://download.csdn.net/detail/wang_situ/8019707

这个是Windows下的MongoDB客户端MongoVUE 这是最后一个全功能的不收费的版本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: