Как отладить проблему с GET Express Router - PullRequest
0 голосов
/ 27 мая 2019

Я разрабатываю игру со стеком MEAN, поэтому мне нужно создать API с Node & MongoDB для хранения результатов и использования этого API в клиенте Angular.

С базой данных все в порядке, и я могу добавить оценку с помощью POST, но теперь я пытаюсь выполнить запрос к базе данных с помощью API, а метод GET не работает.

Я пытаюсь создать простой ответ (route /), но ответ - это Angular client (index.html) в Postman, POST работает, но GET нет!

classRouter.post('/add', (req, res) => {
  // Check request body
  if (typeof req.body === 'undefined' || req.body === null) {
    sendBodyError(res, Vocabulary.errors.noBody)
  };
  // Check fields in the body
  const {
    miss,
    extra,
    ok
  } = checkFields(Mandatory.game, req.body);

  //=> Error: bad fields provided
  if (!ok) {
    sendFieldsError(res, Vocabulary.errors.badFields, miss, extra)
  }
  else {
    //=> Request is valid: use controller
    createScore(req.body)
      .then(apiResponse => sendApiSuccessResponse(res, Vocabulary.request.success, apiResponse))
      .catch(apiResponse => sendApiErrorResponse(res, Vocabulary.request.error, apiResponse))
  };
});

// Route for all score
classRouter.get('/all', (req, res) => {
  getAllScores()
    .then(apiResponse => sendApiSuccessResponse(res, Vocabulary.request.success, apiResponse))
    .catch(apiResponse => sendApiErrorResponse(res, Vocabulary.request.error, apiResponse))
});

classRouter.get('/', function(req, res) {
  res.send('GET request to the homepage');
});            
const createScore = body => {
  return new Promise((resolve, reject) => {
    // Register new user
    ScoreModel.create(body)
      .then(mongoResponse => resolve(mongoResponse))
      .catch(mongoResponse => reject(mongoResponse))
  });
};

// Get all scores from the database
const getAllScores = () => {
  return new Promise((resolve, reject) => {
    ScoreModel.find((error, item) => {
      // Request error
      if (error) {
        return reject(error)
      } else {
        return resolve(item)
      };
    });
  });
};

Если кто-то может мне помочь?

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Лично мне нравится использовать какую-то IDE, чтобы предоставить ее мне.Я использую WebStorm

0 голосов
/ 27 мая 2019

Вам необходимо использовать пакет debug для целей отладки.

Прежде всего вам нужно войти apiResponse в then(), чтобы убедиться, что функция getAllScores возвращает то, что вы действительно ожидали.

Но, похоже, ваша проблема не связана с этими вещами. Вам нужно поставить return перед функцией getAllScores.

classRouter.get( '/all', (req, res) => {
    return getAllScores()
        .then( apiResponse => sendApiSuccessResponse(res, Vocabulary.request.success, apiResponse) )
        .catch( apiResponse => sendApiErrorResponse(res, Vocabulary.request.error, apiResponse))
});
...