dhtmlxScheduler с Node.js
В этом руководст ве описывается процесс создания Scheduler с использованием Node.js и REST API на стороне сервера. Если вы работаете с другими технологиями, ознакомьтесь с вариантами интеграции, приведёнными ниже:
- dhtmlxScheduler с ASP.NET Core
- dhtmlxScheduler с ASP.NET MVC
- dhtmlxScheduler с PHP
- dhtmlxScheduler с PHP: Slim
- dhtmlxScheduler с PHP:Laravel
- dhtmlxScheduler с SalesForce LWC
- dhtmlxScheduler с Ruby on Rails
- dhtmlxScheduler с dhtmlxConnector
В нашем примере Scheduler на Node.js будет взаимодействовать с сервером через REST API. К счастью, для Node.js уже существует несколько готовых решений, поэтому нет необходимости разрабатывать всё с нуля.
В этом руководстве используется фреймворк Express и MySQL для хранения данных.
Полный исходный код доступен на GitHub.
Шаг 1. Инициализация проекта
Создание проекта
Начните с создания нового приложения с помощью yarn или npm:
$ mkdir scheduler-howto-nodejs
$ cd ./scheduler-howto-nodejs
$ yarn init // или npm init
В процессе инициализации вам потребуется ответить на несколько простых вопросов:
$ question name (scheduler-howto-nodejs):
$ question version (1.0.0):
$ question description: My scheduler backend
$ question entry point (index.js): server.js
$ question repository url:
$ question author: Me
$ question license (MIT): MIT
$ question private:
$ success Saved package.json
В результате будет создан файл package.json, который может выглядеть следующим образом:
{
"name": "scheduler-backend",
"version": "1.0.0",
"main": "server.js",
"author": "Me",
"license": "MIT",
}
Добавление зависимостей и установка модулей
Как уже упоминалось, в примере используются Express и MySQL.
Убедитесь, что ваш сервер MySQL настроен, либо воспользуйтесь сервисом, например, Free MySQL Hosting.
Установите express, mysql, body-parser и date-format-lite следующей командой:
$ yarn add express mysql body-parser date-format-lite
или
$ npm install express mysql body-parser date-format-lite
Поскольку в качестве точки входа был выбран server.js, создайте этот файл со следующим содержимым:
const express = require("express"); // используем Express
const bodyParser = require("body-parser"); // для разбора POST-запросов
const app = express(); // создаём приложение
const port = 3000; // порт для прослушивания
// Необходимо для разбора POST-запросов
// строка ниже используется для разбора application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({extended:true}));
// запуск сервера
app.listen(port, () => {
console.log("Server is running on port " + port + "...");
});
Далее обновите ваш package.json, добавив секцию "scripts":
"scripts": {
"start": "node server.js"
}
После этого ваш package.json должен выглядеть так:
{
"name": "scheduler-howto-node",
"version": "1.0.0",
"main": "server.js",
"license": "MIT",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"body-parser": "^1.20.0",
"date-format-lite": "^17.7.0",
"express": "^4.18.1",
"mysql": "^2.18.1",
}
}
Теперь вы можете запустить сервер командой:
$ yarn start
или
$ npm start
Шаг 2. Добавление Scheduler на страницу
Создайте директорию для хранения файлов HTML, CSS и JS фронтенда:
$ mkdir ./public
В папке public создайте файл index.html со следующим содержимым:
<!doctype html>
<html>
<head>
<title>DHTMLX Sсheduler example</title>
<meta charSet="utf-8"/>
{/* scheduler */}
<script src="https://cdn.dhtmlx.com/scheduler/edge/dhtmlxscheduler.js"
charSet="utf-8"></script>
<link href="https://cdn.dhtmlx.com/scheduler/edge/dhtmlxscheduler.css"
rel="stylesheet" type="text/css" charSet="utf-8">
<style>
html, body{
margin:0px;
padding:0px;
height:100%;
overflow:hidden;
}
</style>
</head>
<body>
<div id="scheduler_here" className="dhx_cal_container">
<div className="dhx_cal_navline">
<div className="dhx_cal_prev_button"> </div>
<div className="dhx_cal_next_button"> </div>
<div className="dhx_cal_today_button"></div>
<div className="dhx_cal_date"></div>
<div className="dhx_cal_tab" name="day_tab"></div>
<div className="dhx_cal_tab" name="week_tab"></div>
<div className="dhx_cal_tab" name="month_tab"></div>
</div>
<div className="dhx_cal_header"></div>
<div className="dhx_cal_data"></div>
</div>
<script>
scheduler.config.load_date="%Y-%m-%d %H:%i";
scheduler.init("scheduler_here", new Date(2022, 0, 20), "week");
scheduler.setLoadMode("day");
// загрузка данных с бэкенда
scheduler.load("/events");
// подключение бэкенда к scheduler
const dp = scheduler.createDataProcessor({
url: "/events",
mode: "REST"
});
</script>
</body>
</html>
Этот код создаёт базовую HTML-разметку, подключает dhtmlxScheduler с CDN и инициализирует scheduler с помощью метода init. Обратите внимание, что и body документа, и контейнер scheduler имеют высоту 100%, чтобы компонент корректно занимал всё доступное пространство.
Настройка маршрутов
Чтобы сделать новую страницу доступной, добавьте следующий код в server.js перед строкой "app.listen(...);":
// отдаём статические страницы из директории "./public"
app.use(express.static(__dirname + "/public"));
Перезапустите приложение, чтобы изменения вступили в силу.
Теперь, открыв http://localhost:3000/ в браузере, вы увидите страницу index.html.
