Skip to main content
On this page

Использование с fetch

Для того, чтобы передавать данные между сервером и клиентом, можно использовать стандартный API fetch.

Tip

Для удобного хранения и синхронизации схем вы можете:

  • Вынести их в отдельные файлы (особенно если используете монорепу или fullstack-фреймворки вроде Next.js, Astro и т.д.).
  • Вынести схемы в отдельный приватный или публичный npm-пакет, чтобы переиспользовать их в нескольких проектах.

Пример

Для удобства создадим и вынесем схему данных в отдельный файл.

data.js
import { Serializer, t } from "encodexx";
export const serializer = new Serializer([
{
xValue: t.float64,
yValue: t.float64,
zValue: t.optional(t.float64),
},
]);

Далее создадим сервер для обработки запроса. Будем использовать express.

server.js
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");
});

Далее на клиенте можем отправить данные на сервер и получить ответ.

client.js
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)));