FindOrCreate не находит данные в моей БД

Я создал удаленный метод для выполнения нескольких запросов к моей БД, где я хочу найти или создать до 12 пользовательских моделей одновременно. В обозревателе обратной связи я передаю этот массив ["player0", "player1", "player2"] своей функции, которая, как я знаю, уже находится в моей БД. Однако проблема, с которой я сталкиваюсь, заключается в том, что мне возвращается статус 200 и массив нулевых значений. Если я передаю имена, которых нет в БД, мне возвращается объект для каждого имени со всеми значениями по умолчанию, как и ожидалось. Итак, мой вопрос: что не так с частью поиска моего кода?

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

ОБНОВЛЕНИЕ: ЗДЕСЬ ВЕСЬ МЕТОД


function getPlayerStats(names) {
  console.info('names: ', names);
  return new Promise((resolve, reject) => {
    const { Player } = app.models;
    const playerData = names.map(name => {
      console.info('single name: ', name);
      const defaultSkill = 1500;
      return Player.findOrCreate(
        { where: { name: name } },
        {
          name: name,
          careerSkill: defaultSkill,
          careerHighestSkill: defaultSkill,
          careerWins: 0,
          careerLosses: 0,
          careerPercent: 0,
          careerBestLeader: 'none',
          careerAllLeader: ['none'],
          highestCareerSkill: defaultSkill,
          careerSeasonWins: 0,
          careerSeasonLosses: 0,
          careerSeasonPercent: 0       
    }
      );
    });
    Promise.all(playerData)
      .then(results => resolve(results))
      .catch(err => reject(new Error('could not return results')));
  });
}

module.exports = { getPlayerStats };```
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
116
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что вы должны добавить return перед Player.findOrCreate({name: name},Player.findOrCreate({ where: { name: name } },... — правильная версия фильтра. Кроме того, вы можете опустить этот обратный вызов (err) => {, потому что у вас есть блок catch

Вся функция может выглядеть так: player.js

   Player.getPlayerStats = function (names, cb) {

        const playerPromises = names.map(name => {
            const defaultSkill = 1500;
            return Player.findOrCreate({ where: { name: name } }, {
                "name": name,
                "careerSkill": defaultSkill,
                "careerHighestSkill": defaultSkill,
                "careerWins": 0,
                "careerLosses": 0,
                "careerPercent": 0,
                "careerBestLeader": "none",
                "careerAllLeader": ["none"],
                "highestCareerSkill": defaultSkill,
                "careerSeasonWins": 0,
                "careerSeasonLosses": 0,
                "careerSeasonPercent": 0
            })
        })


        Promise.all(playerPromises)
            .then(players => cb(null, players))
            .catch(err => cb(new Error('could not return results'), null))
    }

Хорошо, это некоторый прогресс. Я добавил в return перед добавлением Player.findOrCreate({name: name}, в предложение where и удалил (err) => { Все новые имена в массиве создаются в БД, однако тело ответа всегда возвращает только первого найденного или созданного игрока. Чего еще мне не хватает, чтобы вернуть все данные игроков, которые я передал функции.

brian c 09.04.2019 19:58

Хорошо, проверьте мое редактирование и как выглядит ваше объявление remoteMethod?

Piotr Labunski 09.04.2019 21:29

хорошо, я обновил исходный пост, чтобы включить весь метод

brian c 09.04.2019 21:36

ок, а как вы прописываете этот метод? У вас должно быть что-то вроде Player.remoteMethod(...

Piotr Labunski 09.04.2019 21:45

Правильный. Я определил Player.remoteMethod в /models/Player.js На самом деле теперь все работает, спасибо! Осталось добавить return к Player.findOrCreate...

brian c 09.04.2019 21:55

Другие вопросы по теме