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'); //返回响应结果给前端
})
})
}