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下完美运行,体验很爽
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接口的定义以及数据库操作的逻辑。
文件结构
ajax.js
- 包含了所有的API路由。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删除指定的日程。
通过上述代码,可以实现一个基本的全功能日程管理后端服务,支持插入、查询、更新和删除日程。