Nodejs fullcalendar 日程控件 后台实时交互实现 (后端代码)

Nodejs fullcalendar 日程控件 后台实时交互实现 (后端代码)

由于都是ajax,所以 采用几个js文件关联 ajax接收文件(ajax.js): var FullCalendar = require("./…/moudels/fullCalendar.js"); module.exports = function(app){ app.post("/insertCalendar",filter.authorize ,function(req,res){ FullCalendar.insertCalendar(req,res,function(){ res.send({status:0}); }); }); app.post("/findCalendar",filter.authorize ,function(req,res){ FullCalendar.findCalendar(req,res,function(data){ var dat = []; for(i in data){ var start = data[i].start; var end = data[i].end; start.setDate(start.getDate());//解决客户端日期BUG +1 end.setDate(end.getDate());

            var y_start = start.getFullYear(),m_start = start.getMonth(),d_start = start.getDate(),hh_start = start.getHours(),mm_start = start.getMinutes();
            var y_end = end.getFullYear(),m_end = end.getMonth(),d_end = end.getDate(),hh_end = end.getHours(),mm_end = end.getMinutes();
            //start date对象给客户端传递,出现数据打乱。单个时间分钟传送
            dat.push(
                {_id:data[i]._id,
                title:data[i].title,
                y_start:y_start, m_start:m_start, d_start:d_start,hh_start : hh_start, mm_start: mm_start,
                y_end :y_end, m_end:m_end, d_end: d_end, hh_end: hh_end,mm_end : mm_end,
                /*start:new Date(y_start,m_start,d_start,hh_start,mm_start),
                end:new Date(y_end,m_end,d_end,hh_end,mm_end),
                start:start,
                end:end,*/
                allDay:data[i].allDay}
            );
            //console.log(hh_start +":"+mm_start + "*_*"+hh_end+":"+mm_end);
            //console.log(start+"*_*"+end);
        }
        res.send({status:0,events:dat});
        
    });
});
app.post("/updateCalendar",filter.authorize ,function(req,res){
    FullCalendar.updateCalendar(req,res,function(){
        res.send({status:0});
    });
});
app.post("/updateDateCalendar",filter.authorize ,function(req,res){
    FullCalendar.updateDateCalendar(req,res,function(){
        res.send({status:0});
    });
});
app.post("/updateDateTimeCalendar",filter.authorize ,function(req,res){
    FullCalendar.updateDateTimeCalendar(req,res,function(){
        res.send({status:0});
    });
});
app.post("/updateTimeCalendar",filter.authorize ,function(req,res){
    FullCalendar.updateTimeCalendar(req,res,function(){
        res.send({status:0});
    });
});
app.post("/removeCalendar",filter.authorize ,function(req,res){
    FullCalendar.removeCalendar(req,res,function(){
        res.send({status:0});
    });
});

}

数据库处理文件(fullCalendar.js): var status = require(’./…/status’); var mongoose = status.mongoose; var db = status.db; var Schema = mongoose.Schema;

var calendar = db.model(‘calendar’,new Schema({ user:String ,title:String ,url:String
,innerdate:{type:Date, default: Date.now} ,update:{type:Date, default: Date.now} ,start:{type:Date, default: Date.now} ,end:{type:Date, default: Date.now} ,allDay:Boolean }));

var Calendar = function(){};

//添加新calendar Calendar.prototype.insertCalendar = function(req,res,func){ var func = func ||function(){} var start = new Date(req.body.start),end = new Date(req.body.end); //start.setHours(0); var cal = new calendar({user:req.session.name,title:req.body.title,url:req.body.url,innerdate:Date(),update:Date(),start:start,end:end,allDay:req.body.allDay}); cal.save(function(err){ if(err){ throw err; } func(req,res); }); }

//查找 Calendar.prototype.findCalendar = function(req,res,func){ var func = func ||function(){} calendar.find({user:req.session.name},function(err,data){ func(data); }); }

//标题更新 Calendar.prototype.updateCalendar = function(req,res,func){ var func = func ||function(){} calendar.update({user:req.session.name,_id:req.body._id},{$set:{ update:Date(),title:req.body.title}}, function(err){ if(err){ console.log(err); }

  func();
}

);
}

//整天更新 Calendar.prototype.updateDateCalendar = function(req,res,func){ var func = func ||function(){} calendar.find({user:req.session.name,_id:req.body._id},function(err,data){ if(data.length>0){

  var start = data[0].start,end = data[0].end;

start.setDate(start.getDate()+parseInt(req.body.dayDelta));

end.setDate(end.getDate()+parseInt(req.body.dayDelta)); calendar.update({user:req.session.name,_id:req.body._id},{$set:{ update:Date(),start:start,end:end,allDay:true}}, function(err){ if(err){ console.log(err); }

  func();
}

); } func();

});
}

//时间、天数更新 Calendar.prototype.updateDateTimeCalendar = function(req,res,func){ var func = func ||function(){} calendar.find({user:req.session.name,_id:req.body._id},function(err,data){ if(data.length>0){ var start = new Date(req.body.start);

  if(data[0].allDay == true){
    var dayDelta = parseInt(req.body.dayDelta);
  var end = new Date(req.body.start);

  end.setDate(start.getDate()),end.setHours(start.getHours() + 2);

}else{ var dayDelta = parseInt(req.body.dayDelta),minuteDelta = parseInt(req.body.minuteDelta); var end = data[0].end; //end.setDate(end.getDate()+dayDelta-1),end.setMinutes(end.getMinutes()+minuteDelta); end.setDate(end.getDate()+dayDelta),end.setMinutes(end.getMinutes()+minuteDelta); } calendar.update({user:req.session.name,_id:req.body._id},{$set:{update:Date(),start:start,end:end,allDay:false}},function(err){ if(err){ console.log(err); } func(0); }); }else{ func(1);
}

});
}

//时间更新 eventsize 也可能天数 Calendar.prototype.updateTimeCalendar = function(req,res,func){ var func = func ||function(){} calendar.find({user:req.session.name,_id:req.body._id},function(err,data){ if(data.length>0){ var dayDelta = parseInt(req.body.dayDelta),minuteDelta = parseInt(req.body.minuteDelta); var end = data[0].end; end.setDate(end.getDate()+dayDelta),end.setMinutes(end.getMinutes()+minuteDelta); if(parseInt(req.body.dayDelta) == 0){

    calendar.update({user:req.session.name,_id:req.body._id},{$set:{update:Date(),end:end,allDay:false}},function(err){
      if(err){
        console.log(err);
      }
      func(0);
    });
}else{
  console.log("天数改变");
  calendar.update({user:req.session.name,_id:req.body._id},{$set:{update:Date(),end:end,allDay:true}},function(err){
      if(err){
        console.log(err);
      }
      func(0);
    });
}

}else{ func(1);
}

});
}

//删除单条calendar Calendar.prototype.removeCalendar = function(req,res,func){ var func = func ||function(){} calendar.remove({_id:req.body._id},function(err){ if(err){ throw err; } func(req,res); }); }

module.exports = new Calendar();

到此,交互功能完成,严格测试,火狐goole下完美运行,体验很爽


2 回复

Nodejs fullcalendar 日程控件 后台实时交互实现 (后端代码)

为了实现 fullcalendar 控件与 Node.js 后端的实时交互,我们需要处理日程的增删改查操作。以下是详细的代码实现:

ajax接收文件(ajax.js)

首先,我们需要设置路由来处理前端的请求。

var express = require('express');
var app = express();
var filter = require('./filter'); // 自定义中间件或认证模块
var FullCalendar = require('./models/fullCalendar');

app.use(express.json());

app.post('/insertCalendar', filter.authorize, function (req, res) {
    FullCalendar.insertCalendar(req, res, function () {
        res.send({ status: 0 });
    });
});

app.post('/findCalendar', filter.authorize, function (req, res) {
    FullCalendar.findCalendar(req, res, function (data) {
        var events = data.map(event => ({
            _id: event._id,
            title: event.title,
            start: event.start,
            end: event.end,
            allDay: event.allDay
        }));
        res.send({ status: 0, events: events });
    });
});

app.post('/updateCalendar', filter.authorize, function (req, res) {
    FullCalendar.updateCalendar(req, res, function () {
        res.send({ status: 0 });
    });
});

app.post('/updateDateCalendar', filter.authorize, function (req, res) {
    FullCalendar.updateDateCalendar(req, res, function () {
        res.send({ status: 0 });
    });
});

app.post('/updateDateTimeCalendar', filter.authorize, function (req, res) {
    FullCalendar.updateDateTimeCalendar(req, res, function () {
        res.send({ status: 0 });
    });
});

app.post('/updateTimeCalendar', filter.authorize, function (req, res) {
    FullCalendar.updateTimeCalendar(req, res, function () {
        res.send({ status: 0 });
    });
});

app.post('/removeCalendar', filter.authorize, function (req, res) {
    FullCalendar.removeCalendar(req, res, function () {
        res.send({ status: 0 });
    });
});

module.exports = app;

数据库处理文件(fullCalendar.js)

接下来,我们处理数据库相关的操作。

var mongoose = require('mongoose');
var db = mongoose.connection;

var calendarSchema = new mongoose.Schema({
    user: String,
    title: String,
    url: String,
    innerdate: { type: Date, default: Date.now },
    update: { type: Date, default: Date.now },
    start: { type: Date, default: Date.now },
    end: { type: Date, default: Date.now },
    allDay: Boolean
});

var Calendar = mongoose.model('calendar', calendarSchema);

// 添加新日程
Calendar.prototype.insertCalendar = function (req, res, func) {
    var start = new Date(req.body.start), end = new Date(req.body.end);
    var cal = new Calendar({
        user: req.session.name,
        title: req.body.title,
        url: req.body.url,
        innerdate: Date(),
        update: Date(),
        start: start,
        end: end,
        allDay: req.body.allDay
    });
    cal.save(function (err) {
        if (err) throw err;
        func(req, res);
    });
};

// 查找日程
Calendar.prototype.findCalendar = function (req, res, func) {
    Calendar.find({ user: req.session.name }, function (err, data) {
        func(data);
    });
};

// 更新日程标题
Calendar.prototype.updateCalendar = function (req, res, func) {
    Calendar.update({ user: req.session.name, _id: req.body._id }, {
        $set: {
            update: Date(),
            title: req.body.title
        }
    }, function (err) {
        if (err) console.log(err);
        func();
    });
};

// 更新日程日期
Calendar.prototype.updateDateCalendar = function (req, res, func) {
    Calendar.findOne({ user: req.session.name, _id: req.body._id }, function (err, data) {
        if (data) {
            var start = data.start, end = data.end;
            start.setDate(start.getDate() + parseInt(req.body.dayDelta));
            end.setDate(end.getDate() + parseInt(req.body.dayDelta));
            Calendar.update({ user: req.session.name, _id: req.body._id }, {
                $set: {
                    update: Date(),
                    start: start,
                    end: end,
                    allDay: true
                }
            }, function (err) {
                if (err) console.log(err);
                func();
            });
        }
        func();
    });
};

// 更新日程时间和日期
Calendar.prototype.updateDateTimeCalendar = function (req, res, func) {
    Calendar.findOne({ user: req.session.name, _id: req.body._id }, function (err, data) {
        if (data) {
            var start = new Date(req.body.start);
            if (data.allDay === true) {
                var end = new Date(req.body.start);
                end.setDate(start.getDate());
                end.setHours(start.getHours() + 2);
            } else {
                var end = data.end;
                end.setDate(end.getDate() + parseInt(req.body.dayDelta));
                end.setMinutes(end.getMinutes() + parseInt(req.body.minuteDelta));
            }
            Calendar.update({ user: req.session.name, _id: req.body._id }, {
                $set: {
                    update: Date(),
                    start: start,
                    end: end,
                    allDay: false
                }
            }, function (err) {
                if (err) console.log(err);
                func(0);
            });
        } else {
            func(1);
        }
    });
};

// 更新日程时间
Calendar.prototype.updateTimeCalendar = function (req, res, func) {
    Calendar.findOne({ user: req.session.name, _id: req.body._id }, function (err, data) {
        if (data) {
            var end = data.end;
            end.setDate(end.getDate() + parseInt(req.body.dayDelta));
            end.setMinutes(end.getMinutes() + parseInt(req.body.minuteDelta));
            if (parseInt(req.body.dayDelta) === 0) {
                Calendar.update({ user: req.session.name, _id: req.body._id }, {
                    $set: {
                        update: Date(),
                        end: end,
                        allDay: false
                    }
                }, function (err) {
                    if (err) console.log(err);
                    func(0);
                });
            } else {
                Calendar.update({ user: req.session.name, _id: req.body._id }, {
                    $set: {
                        update: Date(),
                        end: end,
                        allDay: true
                    }
                }, function (err) {
                    if (err) console.log(err);
                    func(0);
                });
            }
        } else {
            func(1);
        }
    });
};

// 删除日程
Calendar.prototype.removeCalendar = function (req, res, func) {
    Calendar.remove({ _id: req.body._id }, function (err) {
        if (err) throw err;
        func(req, res);
    });
};

module.exports = Calendar;

以上代码实现了 fullcalendar 控件与 Node.js 后端的基本交互功能,包括添加、查找、更新和删除日程。每个功能都通过 AJAX 请求进行处理,并返回相应的状态码和数据。


根据提供的内容,可以发现该Node.js后端实现了与FullCalendar日程控件的交互。下面是基于提供的代码片段进行整理和补充后的完整后端实现,包括了API接口的定义以及数据库操作的逻辑。

文件结构

  1. ajax.js - 包含了所有的API路由。
  2. fullCalendar.js - 定义了与数据库交互的方法。

ajax.js

var express = require('express');
var app = express();
var FullCalendar = require('./fullCalendar');
var filter = require('./filter');  // 假设这里有一个用于权限验证的中间件

app.post("/insertCalendar", filter.authorize, function(req, res) {
    FullCalendar.insertCalendar(req, res, function() {
        res.send({status: 0});
    });
});

app.post("/findCalendar", filter.authorize, function(req, res) {
    FullCalendar.findCalendar(req, res, function(data) {
        var events = data.map(event => ({
            _id: event._id,
            title: event.title,
            start: event.start,
            end: event.end,
            allDay: event.allDay
        }));
        res.send({status: 0, events: events});
    });
});

app.post("/updateCalendar", filter.authorize, function(req, res) {
    FullCalendar.updateCalendar(req, res, function() {
        res.send({status: 0});
    });
});

app.post("/updateDateCalendar", filter.authorize, function(req, res) {
    FullCalendar.updateDateCalendar(req, res, function() {
        res.send({status: 0});
    });
});

app.post("/updateDateTimeCalendar", filter.authorize, function(req, res) {
    FullCalendar.updateDateTimeCalendar(req, res, function() {
        res.send({status: 0});
    });
});

app.post("/updateTimeCalendar", filter.authorize, function(req, res) {
    FullCalendar.updateTimeCalendar(req, res, function() {
        res.send({status: 0});
    });
});

app.post("/removeCalendar", filter.authorize, function(req, res) {
    FullCalendar.removeCalendar(req, res, function() {
        res.send({status: 0});
    });
});

module.exports = app;

fullCalendar.js

const mongoose = require('mongoose');

const calendarSchema = new mongoose.Schema({
    user: String,
    title: String,
    url: String,
    innerdate: { type: Date, default: () => new Date() },
    update: { type: Date, default: () => new Date() },
    start: { type: Date, default: () => new Date() },
    end: { type: Date, default: () => new Date() },
    allDay: Boolean
});

const Calendar = mongoose.model('Calendar', calendarSchema);

class FullCalendar {
    insertCalendar(req, res, func) {
        const cal = new Calendar({
            user: req.session.name,
            title: req.body.title,
            url: req.body.url,
            start: new Date(req.body.start),
            end: new Date(req.body.end),
            allDay: req.body.allDay
        });

        cal.save((err) => {
            if (err) throw err;
            func && func();
        });
    }

    findCalendar(req, res, func) {
        Calendar.find({ user: req.session.name }, (err, data) => {
            func && func(data);
        });
    }

    updateCalendar(req, res, func) {
        Calendar.updateOne({ user: req.session.name, _id: req.body._id }, {
            $set: { update: new Date(), title: req.body.title }
        }, (err) => {
            if (err) console.log(err);
            func && func();
        });
    }

    updateDateCalendar(req, res, func) {
        Calendar.findOne({ user: req.session.name, _id: req.body._id }, (err, data) => {
            if (data) {
                const start = data.start, end = data.end;
                start.setDate(start.getDate() + parseInt(req.body.dayDelta));
                end.setDate(end.getDate() + parseInt(req.body.dayDelta));

                Calendar.updateOne({ user: req.session.name, _id: req.body._id }, {
                    $set: { update: new Date(), start: start, end: end, allDay: true }
                }, (err) => {
                    if (err) console.log(err);
                    func && func();
                });
            } else {
                func && func();
            }
        });
    }

    updateDateTimeCalendar(req, res, func) {
        Calendar.findOne({ user: req.session.name, _id: req.body._id }, (err, data) => {
            if (data) {
                let start = new Date(req.body.start);
                let end = data.end;

                if (data.allDay) {
                    const dayDelta = parseInt(req.body.dayDelta);
                    end.setDate(start.getDate() + dayDelta);
                } else {
                    const dayDelta = parseInt(req.body.dayDelta), minuteDelta = parseInt(req.body.minuteDelta);
                    end.setDate(start.getDate() + dayDelta);
                    end.setMinutes(start.getMinutes() + minuteDelta);
                }

                Calendar.updateOne({ user: req.session.name, _id: req.body._id }, {
                    $set: { update: new Date(), start: start, end: end, allDay: false }
                }, (err) => {
                    if (err) console.log(err);
                    func && func(0);
                });
            } else {
                func && func(1);
            }
        });
    }

    updateTimeCalendar(req, res, func) {
        Calendar.findOne({ user: req.session.name, _id: req.body._id }, (err, data) => {
            if (data) {
                let end = data.end;
                const dayDelta = parseInt(req.body.dayDelta), minuteDelta = parseInt(req.body.minuteDelta);
                end.setDate(end.getDate() + dayDelta);
                end.setMinutes(end.getMinutes() + minuteDelta);

                Calendar.updateOne({ user: req.session.name, _id: req.body._id }, {
                    $set: { update: new Date(), end: end, allDay: dayDelta === 0 }
                }, (err) => {
                    if (err) console.log(err);
                    func && func(0);
                });
            } else {
                func && func(1);
            }
        });
    }

    removeCalendar(req, res, func) {
        Calendar.deleteOne({ _id: req.body._id }, (err) => {
            if (err) throw err;
            func && func();
        });
    }
}

module.exports = new FullCalendar();

解释

  • 插入日程 (insertCalendar) 方法:将日程信息保存到数据库中。
  • 查询日程 (findCalendar) 方法:根据用户会话名筛选并返回用户的所有日程。
  • 更新日程标题 (updateCalendar) 方法:仅更新日程的标题信息。
  • 更新日程日期 (updateDateCalendar) 方法:根据用户请求更新日程的开始和结束日期。
  • 更新日期和时间 (updateDateTimeCalendar) 方法:同时更新日期和时间,还可能调整全天事件状态。
  • 更新时间 (updateTimeCalendar) 方法:更新日程的时间部分,并检查是否需要更改全天事件状态。
  • 删除日程 (removeCalendar) 方法:根据ID删除指定的日程。

通过上述代码,可以实现一个基本的全功能日程管理后端服务,支持插入、查询、更新和删除日程。

回到顶部