首页 > 解决方案 > 如何调试 GET Express 路由器的问题

问题描述

我使用 MEAN 堆栈开发游戏,因此我需要使用 Node 和 MongoDB 创建 API 来存储分数并在 Angular 客户端中使用此 API。

数据库没问题,我可以使用 POST 添加分数,但现在我尝试使用 API 查询数据库并且 GET 方法不起作用。

我尝试创建一个简单的响应(路由/),但响应是 Postman 中的 Angular 客户端(index.html),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)
      };
    });
  });
};

如果有人可以帮助我?

谢谢

标签: node.jsangularmongodbexpressmean-stack

解决方案


您需要使用调试包进行调试。

首先,您需要登录以确保该函数返回您真正期望apiResponse的内容。then()getAllScores

但是,您的问题似乎与这些事情无关。你需要放一个returnbefore 函数getAllScores

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

推荐阅读