StrongLoop Loopback: как настроить код ответа HTTP и заголовок

Я ищу способ настроить код и заголовки HTTP-ответа StrongLoop LoopBack.

Я хотел бы соответствовать некоторым бизнес-правилам компании в отношении REST API.

Типичным случаем для модели, описанной в JSON, является наличие HTTP для ответа на запрос POST с кодом 201 + заголовок Content-Location (вместо кода ответа по умолчанию 200 без заголовка Content-Location).

Можно ли это сделать с помощью LoopBack?


person Nicolas    schedule 20.03.2015    source источник
comment
Итак ... Я думаю, вы можете сделать это с помощью [промежуточного программного обеспечения] (docs.strongloop.com/display/public/LB/Defining+middleware), но у меня проблемы с обработкой примера. Но я буду продолжать попытки.   -  person Jordan Kasper    schedule 20.03.2015


Ответы (1)


К сожалению, способ сделать это немного сложно, потому что LoopBack не имеет простых ловушек для изменения всех ответов, исходящих из API. Вместо этого вам нужно будет добавить код к каждой модели в сценарии загрузки, который подключается с помощью метода afterRemote:

Внутри /server/boot/ добавьте файл (имя не важно):

module.exports = function(app) {

  function modifyResponse(ctx, model, next) {
    var status = ctx.res.statusCode;
    if (status && status === 200) {
      status = 201;
    }
    ctx.res.set('Content-Location', 'the internet');
    ctx.res.status(status).end();
  }

  app.models.ModelOne.afterRemote('**', modifyResponse);
  app.models.ModelTwo.afterRemote('**', modifyResponse);
};
person Jordan Kasper    schedule 20.03.2015
comment
Спасибо, jakerella, он работает очень хорошо и соответствует моим потребностям! Я применяю его ко всем своим моделям приложений, как это for (var model in app.models) app.models[model].afterRemote('**', modifyResponse); - person Nicolas; 23.03.2015
comment
Чтобы сделать что-то для всех моделей, похоже, вы можете пойти следующим образом: docs.strongloop.com/display/public/LB/ - person neemzy; 02.05.2015
comment
ctx.res.status(status).end(); не рекомендуется, вы должны вызвать next() и позволить цепочке remoteMethod продолжаться. - person Fran Herrero; 06.07.2016
comment
Вы можете добавить этот хук afterRemote в файл модели js в common/models/MyModel.js файле. - person asmmahmud; 25.04.2018