Использование с fetch
Для того, чтобы передавать данные между сервером и клиентом, можно использовать стандартный API fetch
.
Tip
Для удобного хранения и синхронизации схем вы можете:
- Вынести их в отдельные файлы (особенно если используете монорепу или fullstack-фреймворки вроде Next.js, Astro и т.д.).
- Вынести схемы в отдельный приватный или публичный npm-пакет, чтобы переиспользовать их в нескольких проектах.
Пример
Для удобства создадим и вынесем схему данных в отдельный файл.
import { Serializer, t } from "encodexx";
export const serializer = new Serializer([ { xValue: t.float64, yValue: t.float64, zValue: t.optional(t.float64), },]);
Далее создадим сервер для обработки запроса. Будем использовать express.
import express from "express";import { serializer } from "./data";
const app = express();
app.use(express.raw({ type: "application/octet-stream" }));
app.post("/", (req, res) => { const data = serializer.decode(req.body); console.log("Get data ", data.slice(0, 5));
const response = new Array(100); response.fill({ xValue: Math.random(), yValue: Math.random(), zValue: Math.random() });
// Кодируем данные и отправляем const encoded = Buffer.from(serializer.encode(response).uint8Array);
console.log("Send Data", response.slice(0, 5)); res.set("Content-Type", "application/octet-stream"); res.send(encoded);});
app.listen(3000, () => { console.log("Server started on http://localhost:3000");});
Далее на клиенте можем отправить данные на сервер и получить ответ.
import { serializer } from "./data";
const data = new Array(5);data.fill({ xValue: 2.3463, yValue: 43.321223 });const body = serializer.encode(data).buffer;
fetch("http://localhost:3000", { method: "POST", body, headers: { // Указываем, что отправляем бинарные данные "Content-Type": "application/octet-stream", },}) .then((response) => response.arrayBuffer()) .then((buffer) => serializer.decode(buffer)) .then((data) => console.log("get data, length ", data.length, data.slice(0, 5)));