带有Node JS的DHTMLX调度程序

时间:2017-07-02 15:11:14

标签: javascript node.js mongodb dhtmlx dhtmlx-scheduler

我已经关注了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">&nbsp;</div>
            <div class="dhx_cal_next_button">&nbsp;</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文档。我可能完全错过了一个明显的解决方案,但我似乎无法找到我在这里缺少的东西,所以任何帮助都会受到赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

  

但我还没有能够让db.event.insert()工作,因为它的路由没有启动。

似乎您的代码没有 POST / data 请求的路由,当您在客户端插入/更新/删除项目时会调用该路由。以下是示例https://github.com/DHTMLX/node-scheduler-demo/blob/master/app.js#L52

中的相关代码

关于 GET / init 路由 - 它仅用于将一些测试数据插入到db中,并且是手动调用的。您可以删除它而不会对应用程序的其余部分产生任何影响