我想这比一个特定的编码问题更像是一个过程性问题,但是我有一个节点应用程序,并且正在使用DHTMLX日历处理它。我希望每个用户都有针对其特定日历的事件的单独集合。
就我现在的实现方式而言,每个人都可以看到相同的日历并可以对其进行编辑。我想要每个用户都有自己的可编辑日历。我怎样才能做到这一点?我尝试使用req.user,但应用程序崩溃,提示未定义req。我对javascript很陌生,所以我做错了。
感谢您的帮助,谢谢!
这是我实现日历的app.js部分:
var db = require('mongoskin').db("myAtlasClusterLink", { w: 0});
db.bind('event');
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/init', function(req, res){
db.event.insert({
text:"My test event A",
start_date: new Date(2018,8,1),
end_date: new Date(2018,8,5)
});
db.event.insert({
text:"My test event B",
start_date: new Date(2018,8,19),
end_date: new Date(2018,8,24)
});
db.event.insert({
text:"Morning event",
start_date: new Date(2018,8,4,4,0),
end_date: new Date(2018,8,4,14,0)
});
db.event.insert({
text:"One more test event",
start_date: new Date(2018,8,3),
end_date: new Date(2018,8,8),
color: "#DD8616"
});
res.send("Test events were added to the database")
});
app.get('/data', function(req, res){
db.event.find().toArray(function(err, data){
//set id property for all records
console.log(err);
for (var i = 0; i < data.length; i++)
data[i].id = data[i]._id;
//output response
res.send(data);
});
});
app.post('/data', function(req, res){
var data = req.body;
var mode = data["!nativeeditor_status"];
var sid = data.id;
var tid = sid;
delete data.id;
delete data.gr_id;
delete data["!nativeeditor_status"];
function update_response(err, result){
if (err)
mode = "error";
else if (mode == "inserted")
tid = data._id;
res.setHeader("Content-Type","application/json");
res.send({action: mode, sid: sid, tid: tid});
}
if (mode == "updated")
db.event.updateById( sid, data, update_response);
else if (mode == "inserted")
db.event.insert(data, update_response);
else if (mode == "deleted")
db.event.removeById( sid, update_response);
else
res.send("Not supported operation");
});
答案 0 :(得分:0)
我在这里看不到任何有关当前用户的代码。您需要服务器将用户与其他用户区分开(例如this package提供的内容)以及一组路由,UI以及客户端存储,供用户登录/注销并使用其当前会话的标识符发送请求。但这是一个完全不同的主题。
然后您可以:
在这里,我将所有内容存储在同一集合中,因为它们是相同的“种类”数据,当/如果您要在用户之间共享事件,将更容易扩充系统。
答案 1 :(得分:0)
首先,您应该考虑一种区分当前用户与其他用户的方法。有几种方法可以做到:
无论哪种方式,您都需要更好的数据库架构来执行此操作。我建议为用户使用一个单独的集合,为日历数据使用另一个。然后在用户架构中引用日历数据。
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/MyDatabase');
const userSchema = new mongoose.Schema({
username: String,
calendars: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Calendar'
},
});
const CalendarSchema = new mongoose.Schema({
// calendar data here
});
const UserDetails = mongoose.model('User', userSchema );
只需确保在创建日历时,将其添加到相应的用户日历数组中即可:
Calendar.create(newCalendarDataObj, function(error, createdCalendar){
User.findOne({username: usernameGotFromBody}, function(error, foundUser){
foundUser.calendars.push(createdCalendar);
foundUser.save();
}
});