Angular 6 http ответ на вопрос - PullRequest
       3

Angular 6 http ответ на вопрос

0 голосов
/ 24 сентября 2018

Я обнаружил очень странное поведение с запросом HttpClient get.

Ответ 1

Отправка API:

{
  payload: {
    object: {
      array: [1, 2, 3]
    }
  }
}

Угловое получение:

{
  payload: {
    object: {
      array: []
    }
  }
}

Ответ 2

API отправляет:

{
  payload: {
    array: [
      object: {
        array: [1, 2, 3]
      }
    ]
  }
}

Angular получает:

{
  payload: {
    array: [
      object: {
        array: [1, 2, 3]
      }
    ]
  }
}

Кто-нибудь встречал такое поведение?

Обновление

Угловой код:

this.http
  .get(`instance/${id}`)
  .subscribe(
    response => log('get', response),
    error => log('error', error)
  );

Код API:

async function getInstance(req, res, next) {
  const instanceId = sanitize(req.params.id);

  if (!instanceId) {
    return utils.response[400](res, {
      message: 'Missed id'
    });
  }

  if (!instanceId.match(/^[0-9a-fA-F]{24}$/)) {
    return utils.response[400](res, {
      message: 'Wrong id'
    });
  }

  const model = models['instance'];
  const query = model
    .schema
    .findById(new mongoose.Types.ObjectId(instanceId))
    .populate('subInstance')
    .select(model.select);

  try {
    const instance = await query.exec();

    if (!instance) {
      return utils.response[404](res, {
        message: 'Instance not found'
      });
    }

    return utils.response[200](res, {
      instance: instance
      // I changed the response to this and everything works:
      // instance: [instance]
    });
  } catch (err) {
    return utils.response[501](res, err);
  }
}

Обновление 2

Код функции ответа:

function sendResponse(response, status, message, payload) {
  return response
    .status(status)
    .send({
      status: status,
      message: message,
      payload: payload
    });
}

module.exports = {
  200: (res, result) => sendResponse(res, 200, 'SUCCESS', result),
  201: (res, result) => sendResponse(res, 201, 'CREATED', result),
  204: (res, result) => sendResponse(res, 201, 'UPDATED', result),
  205: (res, result) => sendResponse(res, 201, 'REMOVED', result),
  301: (res, result) => sendResponse(res, 301, 'REDIRECTED', result),
  400: (res, result) => sendResponse(res, 400, 'NOT_VALID', result),
  401: (res, result) => sendResponse(res, 401, 'NOT_AUTHENTICATED', result),
  403: (res, result) => sendResponse(res, 403, 'NOT_AUTHORIZED', result),
  404: (res, result) => sendResponse(res, 404, 'NOT_FOUND', result),
  406: (res, result) => sendResponse(res, 406, 'WRONG_TYPE', result),
  409: (res, result) => sendResponse(res, 409, 'DUPLICATE', result),
  501: (res, result) => sendResponse(res, 501, 'ELSE_SERVER', result)
};

Обновление 3

enter image description here

1 Ответ

0 голосов
/ 24 сентября 2018

Это из-за асинхронного поведения, просто посмотрите, печатается ли angular до завершения вызова.

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