我已经关注了DTHMLX调度程序tutorial,但我无法让db.event.insert()
工作,因为它的路由没有启动。但是,当我通过shell插入数据时,我能够显示MongoDB中的数据。
与教程一样,我使用MongoSkin作为MongoDB驱动程序。 MongoSkin和Express都是相同的版本"mongoskin": "~0.6.0"
& {/ 1}}就像在教程中一样。
"express": "~3.3.8"
服务器文件非常简单,就像教程一样。服务器文件已从app.js更改为server.js。
<!-- index.html -->
<!doctype html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Basic initialization</title>
</head>
<script src="codebase/dhtmlxscheduler.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" href="codebase/dhtmlxscheduler.css" type="text/css" media="screen" title="no title" charset="utf-8">
<style type="text/css" media="screen">
html, body{
margin:0px;
padding:0px;
height:100%;
overflow:hidden;
}
</style>
<script type="text/javascript" charset="utf-8">
function init() {
scheduler.config.xml_date="%Y-%m-%d %H:%i"; //changes date format
scheduler.init('scheduler_here',new Date(),"month"); // when the calendar is initialized
scheduler.templates.xml_date = function(value){ return new Date(value); };
scheduler.load("/data", "json");
var dp = new dataProcessor("/data");
dp.init(scheduler);
dp.setTransactionMode("POST", true);
console.log('init on index finished');
}
</script>
<body onload="init();">
<div id="scheduler_here" class="dhx_cal_container" style='width:100%; height:100%;'>
<div class="dhx_cal_navline">
<div class="dhx_cal_prev_button"> </div>
<div class="dhx_cal_next_button"> </div>
<div class="dhx_cal_today_button"></div>
<div class="dhx_cal_date"></div>
<div class="dhx_cal_tab" name="day_tab" style="right:204px;"></div>
<div class="dhx_cal_tab" name="week_tab" style="right:140px;"></div>
<div class="dhx_cal_tab" name="month_tab" style="right:76px;"></div>
</div>
<div class="dhx_cal_header">
</div>
<div class="dhx_cal_data">
</div>
</div>
</body>
我能够使用//server.js
var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var db = require('mongoskin').db("mongodb://localhost:27017/testdb", { w: 0});
db.bind('event');
var app = express();
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.bodyParser());
app.get('/init', function(req, res){
if (err) throw err;
console.log('before object');
db.event.insert({
text:"My test event A",
start_date: new Date(2017,5,1),
end_date: new Date(2017,5,5)
}, console.log('first object run'));
db.event.insert({
text:"My test event B",
start_date: new Date(2017,5,19),
end_date: new Date(2017,5,24)
});
db.event.insert({
text:"Morning event",
start_date: new Date(2017,5,4),
end_date: new Date(2017,5,4)
});
db.event.insert({
text:"One more test event",
start_date: new Date(2017,5,3),
end_date: new Date(2017,5,8),
color: "#DD8616"
});
res.send("Test events were added to the database");
console.log('events inserted?')
});
app.get('/data', function(req, res){
db.event.find().toArray(function(err, data){
//set id property for all records
for (var i = 0; i < data.length; i++)
// console.log('in for loop');
data[i].id = data[i]._id;
//output response
res.send(data);
console.log('data sent');
});
});
app.listen(3000);
console.log('listening on port 3000');
路由和回调函数,并将我的集合打印到日历上,但只有在将其插入MongoDB的shell命令行后才能使用。
插入数据也是如此,因为app.get('/data'
路由永远不会被触发,因此会遗漏db.event.insert
方法。我在测试中发现,使用console.logs。
我阅读了DHTMLX Scheduler教程,网站文档,MongoDB文档和MongoSkin文档。我可能完全错过了一个明显的解决方案,但我似乎无法找到我在这里缺少的东西,所以任何帮助都会受到赞赏。感谢。
答案 0 :(得分:0)
但我还没有能够让db.event.insert()工作,因为它的路由没有启动。
似乎您的代码没有 POST / data 请求的路由,当您在客户端插入/更新/删除项目时会调用该路由。以下是示例https://github.com/DHTMLX/node-scheduler-demo/blob/master/app.js#L52
中的相关代码关于 GET / init 路由 - 它仅用于将一些测试数据插入到db中,并且是手动调用的。您可以删除它而不会对应用程序的其余部分产生任何影响