简体   繁体   English

Angular 6 http 响应问题

[英]Angular 6 http response issue

I have found a very strange behavior with HttpClient get request.我发现HttpClient get请求有一个非常奇怪的行为。

Response 1回应 1

API sends: API 发送:

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

Angular receives:角度接收:

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

Response 2回应 2

API sends: API 发送:

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

Angular receives:角度接收:

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

Do anyone met such behavior?有没有人遇到过这种行为?

Update更新

Angular code:角度代码:

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

API code:接口代码:

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);
  }
}

Update 2更新 2

Response function code:响应函数代码:

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)
};

Update 3更新 3

在此处输入图片说明

是因为异步行为,只看调用结束前是否打印了angular。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM