【发布时间】:2020-01-28 09:26:01
【问题描述】:
我正在从事一个与活动相关的项目,我需要确保两个活动不能在同一个场地的相同时间设置。
为此,每当添加新事件时,我都会使用 find() 来获取具有相同事件地点的所有事件,然后迭代检查新事件时间段是否与数据库中具有相同地点的其他事件发生冲突.
我收到两个错误:
1) 发送后无法设置标头
2) 我认为我的迭代逻辑不正确,我希望完全检查数组,然后如果同一事件场地对任何 XYZ 事件有不同的时间,则插入。
我尝试使用过滤器、减少等,但似乎无法获得预期的结果。
_this.insert = function(req, res) {
var obj = new _this.model(req.body);
obj.save(function(err, item) {
if (err && err.code === 11000) {
res.sendStatus(400);
}
if (err) {
return console.error(err);
}
_this.model.find({ event_ground: req.body.event_ground }, function(
err,
docs
) {
events = docs;
events.map(event => {
if (event.event_date_time && event.event_end_time) {
endTimeofEvent = moment(event.event_end_time);
timeofEvent = moment(event.event_date_time);
let isStartTime = moment(req.body.event_date_time).isBetween(
timeofEvent,
endTimeofEvent
);
debugger
let isEndTime = moment(req.body.event_end_time).isBetween(
timeofEvent,
endTimeofEvent
);
debugger
if (isStartTime === false && isEndTime === false) {
console.log('DB UPDATED');
debugger
_this.userModel.updateOne(
{
_id: req.params.id
},
{
$push: {
events: item._id
}
},
function(err) {
if (err) {
res.status(404).json('Something Went Wrong');
}
res.sendStatus(200);
}
);
debugger
}
if(isStartTime === true || isEndTime === true) {
console.log('DB WONT BE UPDATED');
res.status(400).json({
success: false,
msg:
'This Venue is booked from ' +
timeofEvent.format('LLL') +
' & ' +
endTimeofEvent.format('LLL'),
status: false
});
}
}
});
});
});
};
如果同名事件没有时间冲突,则添加新事件,否则如果可以添加事件,等等。
【问题讨论】:
标签: javascript arrays node.js loops http-headers