本文主要讲解使用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了半天没有解决
后来换了这种方式,就解决了。
本文工程下载地址:http://download.csdn.net/detail/wang_situ/8020545
顺便附上一个mongodbVUE的下载地址:http://download.csdn.net/detail/wang_situ/8019707
这个是Windows下的MongoDB客户端MongoVUE 这是最后一个全功能的不收费的版本。