Ошибка при использовании компонента loopback-storage-component для загрузки/выгрузки файлов в хранилище Azure.

Я использую компонент хранилища LoopBack для отправки и скачивания файлов в облачное хранилище Azure, как показано на их документация
Я создал модель с именем container в файле model-config.json.

 "container": {
    "dataSource": "storage",
    "public": true
  }

с источником данных в datasouce.json

"storage": {
    "name": "storage",
    "connector": "loopback-component-storage",
    "provider": 'azure',
    "storageAccount": "xxxxx",
    "storageAccessKey": "xxxx"
  }

Теперь у меня есть REST API, как описано в их документации. вот ошибка, которую я получаю каждый раз, когда я вызываю одну из сгенерированных конечных точек GET /api/containers.

{
  "error": {
    "name": "Error",
    "status": 400,
    "message": "azure Error (400): Bad Request",
    "provider": "azure",
    "failCode": "Bad Request",
    "statusCode": 400,
    "href": "http://xxxx.blob.core.windows.net/?comp=list",
    "method": "GET",
    "headers": {
      "content-type": "application/xml",
      "server": "Microsoft-HTTPAPI/2.0",
      "x-ms-request-id": "820995fc-0001-013e-7b9a-48de28000000",
      "date": "Sun, 27 Nov 2016 10:40:02 GMT",
      "cache-control": "proxy-revalidate",
      "content-length": "328",
      "connection": "close"
    },
    "result": {
      "err": "<?xml version=\"1.0\" encoding=\"utf-8\"?><Error><Code>InvalidHeaderValue</Code><Message>The value for one of the HTTP headers is not in the correct format.\nRequestId:820995fc-0001-013e-7b9a-48de28000000\nTime:2016-11-27T10:40:02.3522933Z</Message><HeaderName>x-ms-version</HeaderName><HeaderValue>2011-08-18</HeaderValue></Error>"
    }
  }
}

после поиска этой ошибки я нашел этот ответ на мой вопрос в том, нужно ли мне устанавливать заголовок вручную и как это сделать, или отсутствует конфигурация лазурного хранилища для loopback-storage-component.

Я добавил этот фрагмент кода в common/models/container.js и получил ту же ошибку.

module.exports = function(Container) {
  Container.beforeRemote('**', function(context, user, next) {
    //2015-12-11
    context.res.set('x-ms-version', '2015-12-11');
    next();
  });
};

person user3621876    schedule 27.11.2016    source источник
comment
Попробуйте сначала настроить заголовок вручную и обновить свой вопрос   -  person Jeroen Heier    schedule 27.11.2016
comment
Чтобы перечислить контейнеры под указанной учетной записью через REST API, Авторизация, Дата (или x-ms-date) и x-ms-версия< /b> должен быть обязательным в заголовке запроса. Используйте Fiddler для проверки заголовков запроса и фактических значений.   -  person Fei Han    schedule 28.11.2016


Ответы (2)


Я протестировал пример-2.0 с той же конфигурацией в model-config.json и datasouce.json, что и у вас, на моей стороне работает нормально без каких-либо других настроек или дополнительных модификаций кода.

Не могли бы вы предоставить более подробную информацию об используемой среде и версии SDK. Вы можете попробовать обновить свои зависимости, зависимости в моем тесте:

"dependencies": {
    "compression": "^1.0.3",
    "errorhandler": "^1.1.1",
    "loopback": "^2.0.0",
    "loopback-boot": "^2.0.0",
    "loopback-component-explorer": "^2.1.0",
    "loopback-component-storage": "^1.5.0",
    "loopback-datasource-juggler": "^2.7.0",
    "serve-favicon": "^2.0.1"
  }

Наконец, вы можете попробовать изменить исходный код pkgcloud, заменив 2011-08-18 на 2015-12-11, по адресу https://github.com/pkgcloud/pkgcloud/blob/master/lib/pkgcloud/azure/utils/constants.js.#L2048

Любая дальнейшая проблема, пожалуйста, не стесняйтесь, дайте мне знать.

person Gary Liu    schedule 28.11.2016
comment
Я попробовал проект example-2.0 с моими конфигурациями и изменил зависимости в package.json. вот мои зависимости "dependencies": { "compression": "^1.0.3", "errorhandler": "^1.1.1", "loopback": "^2.22.0", "loopback-boot": "^2.6.5", "loopback-component-explorer": "^2.4.0", "loopback-component-storage": "^1.10.0", "loopback-datasource-juggler": "^2.39.0", "serve-favicon": "^2.0.1" } - person user3621876; 02.12.2016

Проблема была в типе развертывания хранилища. Я создал хранилище с помощью классических моделей развертывания Azure, однако, когда я изменил модель развертывания на «Azure Resource Manager», все заработало хорошо. Различия можно найти здесь.

person user3621876    schedule 12.12.2016