Как создать конечную точку в Sequelize. js, которая получает произвольную JSON в модели? - PullRequest
0 голосов
/ 08 апреля 2020

Я создал простую конечную точку на Express сервере, используя Sequelize и Postgresql. Эта конечная точка должна получить простой запрос POST с объектом JSON, регистрирующим события в качестве обратного вызова. Дело в том, что это будет JSON объект с большим количеством строк и чисел, для которого я не могу написать конкретную c модель.

У меня есть две проблемы с моей текущей моделью.

Я могу получать события, которые направлены на Event.event, когда на самом деле я хочу получить все, что JSON не должно начинаться с Ключевое «событие», как я написал на моей модели. Однако на самом деле я не знаю, как создать модель, которая позволяет нам отправлять любые неопределенные JSON в мою таблицу События.

Если я получаю те обратные вызовы, которые пытаются отправить JSON в эту конечную точку, они, естественно, приходят в NULL, поскольку они не соответствуют Event.event

Вот модель:

const Sequelize = require('sequelize');
const sequelize = require('../db');

const Event = sequelize.define(
    'Event',
    {
        event: {type: Sequelize.JSON, allowNull: false}
    }
);

module.exports = Event;

И маршрутизатор:

const { Router } = require("express");
const Event = require("./model");
const router = new Router();

router.get("/event-receiver", (req, res, next) => {
  const limit = req.query.limit || 25;
  const offset = req.query.offset || 0;

  Event.findAll({ limit, offset })
    .then(allEvents => res.json(allEvents))
    .catch(next);
});

router.post("/event-receiver", (req, res, next) => {
  Event.create(req.body)
    .then(newEvent => res.status(201).json(newEvent))
    .catch(next);
});

module.exports = router;

Мой актуальный вопрос: как мне написать модель, которая принимает любой неопределенный тип JSON, который отправляется на эту конечную точку?

Например :

{
AnyRandomJSON: {type: Sequelize.JSON, allowNull: False}
}

На самом деле не нужно давать ему имя типа «событие», а просто получать все, что отправлено в «/ event-receive» и регистрироваться в указанном столбце c на моем postgresql под названием «События или данные», что-нибудь в этом роде.

Читая документацию и другие справочные статьи, я не узнаю, как это сделать простым способом.

1 Ответ

0 голосов
/ 08 апреля 2020

У меня была похожая проблема при хранении данных JSON для ресторанов от Yelp. Пока данные JSON, их структура не имеет значения.

Чтобы избежать несовместимости (некоторые SQL движки не поддерживают JSON), я в итоге сохранил их как Sequelize.TEXT:

    restaurant_yelp_info: Sequelize.TEXT()

То, что вы называете столбцом, не так важно.

Я использую JSON.stringify() для преобразования в JSON перед сохранением, если необходимо.

Я использую JOSN.parse() преобразовать JSON в объект после поиска.

...