var bodyParser = require('body-parser') var mongoose = require('mongoose'); // **************** MongoDB数据库 ******************* // 连接数据库 mongoose.Promise = global.Promise; mongoose.connect('mongodb://localhost/todo', {useMongoClient: true}) .then(function(){console.log('MongoDB数据库连接成功')}) .catch(function(err){ console.log(err)}) // 创建数据库结构,表名为todolists var TodoList = mongoose.model('todolist', { id: Number, done: Boolean, title: String }) // 测试代码:在数据库中todolists表存储数据 // TodoList({id:100, done:false, title: "吃饭"}).save(function(err, data){ // if(err) throw err; // console.log('保存成功') // }) // **************** MongoDB数据库 ******************* // 向外暴露函数,接收app对象 module.exports = function(app){ app.use(bodyParser.urlencoded({ extended: false })) // 1.获取数据的请求(GET) app.get("/", function(req, res){ // 查询数据库中的所有数据 TodoList.find({}, function(err, data){ // 将所有数据返回给前端首页进行渲染 res.render("index", {"todos": data}); }) }) // **********下面开始拦截各种前端发起的请求*********** // 2.拦截前端提交数据的POST请求 app.post("/add", function(req, res){ var obj = {id: Date.now(), done:false, title: req.body.title} // 往数据库中插入数据,并生成一个不重复的id主键 TodoList(obj).save(function(err, data){ if(err) throw err; res.send('ok') }) }) // 3.拦截前端提交数据的POST请求 app.delete("/del/:id", function(req, res){ var id = Number(req.params.id); // 查询数据库,根据id删除数据 TodoList.find({"id":id}).remove(function(err, data){ if(err) throw err; res.send('ok') //返回响应结果给前端 }) }) // 4.拦截前端的PUT修改请求,修改代办事项状态 app.put("/update/:id", function(req, res){ var id = Number(req.params.id); // 修改代办事项状态为(是/否) TodoList.findOne({"id":id}, function(err, data){ data.done = !data.done; //赋值修改 data.save(); //保存 res.send('ok'); //返回响应结果给前端 }) }) // 5.拦截前端的PATCH修改请求,修改代办事项的内容 app.patch("/update/:id", function(req, res){ var id = Number(req.params.id); // 修改代办事项的title内容,方法1 // TodoList.findOne({"id":id}, function(err, data){ // data.title = req.body.title; //赋值修改 // data.save(); //保存 // res.send('ok'); //返回响应结果给前端 // }) TodoList.update({"id":id}, {$set: {"title": req.body.title}}, function(err, data){ res.send('ok'); //返回响应结果给前端 }) }) }