Как передать результат запроса Sequelize другой функции, которая будет возвращать объект JSON с выражением? - PullRequest
0 голосов
/ 16 ноября 2018

, поэтому я создаю Restful API с помощью nodeJS, Postgres, а также сиквелизирую и выражаю как основные зависимости.

Я добавляю слой, который будет извлекать все данные о заказах из базы данных по запросу /get на моем API. У меня есть 2 основных файла для выполнения работы и маршрутизатор, который, я думаю, не имеет отношения к этой проблеме, поэтому я не буду его включать:

    // services/orders.js

    import { Order } from '../models'

   const test = () => {
     Order.findAll().then(data => {
         console.log(data)
          })
        };

Кажется, это работает нормально, поскольку выводит массив, содержащий список элементов, которые я вводил вручную в базу данных. Это выглядит следующим образом:

[ order {
    dataValues: 
     { id: 0,
       title: 'blue orange',
       date: 2018-11-14T05:20:11.735Z,
       user_id: '8753iuufsd98',
       createdat: 2018-11-14T05:20:16.831Z,
       updatedat: 2018-11-14T05:20:20.072Z },
    _previousDataValues: 
     { id: 0,
       title: 'blue orange',
       date: 2018-11-14T05:20:11.735Z,
       user_id: '8753iuufsd98',
       createdat: 2018-11-14T05:20:16.831Z,
       updatedat: 2018-11-14T05:20:20.072Z },
    _changed: {},
    _modelOptions: 
     { timestamps: true,
       validate: {},
       freezeTableName: false,
       underscored: false,
       underscoredAll: false,
       paranoid: false,
       rejectOnEmpty: false,
       whereCollection: null,
       schema: 'us',
       schemaDelimiter: '',
       defaultScope: {},
       scopes: [],
       indexes: [],
       name: [Object],
       omitNull: false,
       createdAt: 'createdat',
       updatedAt: 'updatedat',
       sequelize: [Object],
       hooks: {},
       uniqueKeys: {} },
    _options: 
     { isNewRecord: false,
       _schema: 'us',
       _schemaDelimiter: '',
       raw: true,
       attributes: [Array] },
    __eagerlyLoadedAssociations: [],
    isNewRecord: false },
  order {
    dataValues: 
     { id: 1,
       title: 'black blue',
       date: 2018-11-14T07:47:09.743Z,
       user_id: 'lksdfjsldjfl',
       createdat: 2018-11-14T07:47:12.698Z,
       updatedat: 2018-11-14T07:47:15.097Z },
    _previousDataValues: 
     { id: 1,
       title: 'black blue',
       date: 2018-11-14T07:47:09.743Z,
       user_id: 'lksdfjsldjfl',
       createdat: 2018-11-14T07:47:12.698Z,
       updatedat: 2018-11-14T07:47:15.097Z },
    _changed: {},
    _modelOptions: 
     { timestamps: true,
       validate: {},
       freezeTableName: false,
       underscored: false,
       underscoredAll: false,
       paranoid: false,
       rejectOnEmpty: false,
       whereCollection: null,
       schema: 'us',
       schemaDelimiter: '',
       defaultScope: {},
       scopes: [],
       indexes: [],
       name: [Object],
       omitNull: false,
       createdAt: 'createdat',
       updatedAt: 'updatedat',
       sequelize: [Object],
       hooks: {},
       uniqueKeys: {} },
    _options: 
     { isNewRecord: false,
       _schema: 'us',
       _schemaDelimiter: '',
       raw: true,
       attributes: [Array] },
    __eagerlyLoadedAssociations: [],
    isNewRecord: false },
  order {
    dataValues: 
     { id: 2,
       title: 'ornage yellow',
       date: 2018-11-14T07:47:31.768Z,
       user_id: 'hfjkseiurr',
       createdat: 2018-11-14T07:47:34.337Z,
       updatedat: 2018-11-14T07:47:36.626Z },
    _previousDataValues: 
     { id: 2,
       title: 'ornage yellow',
       date: 2018-11-14T07:47:31.768Z,
       user_id: 'hfjkseiurr',
       createdat: 2018-11-14T07:47:34.337Z,
       updatedat: 2018-11-14T07:47:36.626Z },
    _changed: {},
    _modelOptions: 
     { timestamps: true,
       validate: {},
       freezeTableName: false,
       underscored: false,
       underscoredAll: false,
       paranoid: false,
       rejectOnEmpty: false,
       whereCollection: null,
       schema: 'us',
       schemaDelimiter: '',
       defaultScope: {},
       scopes: [],
       indexes: [],
       name: [Object],
       omitNull: false,
       createdAt: 'createdat',
       updatedAt: 'updatedat',
       sequelize: [Object],
       hooks: {},
       uniqueKeys: {} },
    _options: 
     { isNewRecord: false,
       _schema: 'us',
       _schemaDelimiter: '',
       raw: true,
       attributes: [Array] },
    __eagerlyLoadedAssociations: [],
    isNewRecord: false } ]

Теперь у меня есть контроллер с функцией getOrders, которая выглядит следующим образом и предполагает возвращение объекта JSON, выданного services/orders.js:

// controllers/orders.js
function getOrders(req, res) {
    return res.send({
        data : orderServices.test()
    })
}

Проблема здесь в том, что при получении запроса с почтальоном, controllers/orders.js возвращает это:

    //output on postman ...
{}

пустой объект .... Мой вопрос здесь заключается в том, как получить данные, которые были правильно обработаны services/orders.js до controllers/orders.js, чтобы express мог отображать их через res.send(), а также, почему результат запрос не просто останавливается на:

{ id: 0,
   title: 'blue orange',
   date: 2018-11-14T05:20:11.735Z,
   user_id: '8753iuufsd98',
   createdat: 2018-11-14T05:20:16.831Z,
   updatedat: 2018-11-14T05:20:20.072Z },

вместо этого длинного массива?

Извините, если мой вопрос длинный. Я старался сделать как можно проще и не сбивать с толку.

1 Ответ

0 голосов
/ 16 ноября 2018

Я не могу ответить на ваш последний вопрос о формате ваших данных, потому что я не знаком с Sequelize, но проблема с передачей данных в ваш ответ ExpressJS связана с отсутствием понимания шаблона Promise.Пусть ваша сервисная функция вернет Обещание вместо этого:

// services/orders.js
import { Order } from '../models'
const test = () => Order.findAll();
// export test at some point

А затем вызовите сервисную функцию внутри вашего контроллера для доступа к возвращенным данным:

// controllers/orders.js
function getOrders(req, res) {
  orderServices.test()
    .then(data => res.send({ data }));
}

Сначала изучите шаблоны асинхронного программирования - обратные вызовы, затем Обещания - и причины, по которым вы должны использовать этот подход, станут ясны.

Этот ответ должен охватывать значительную часть соответствующего предмета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...