HTTP 400 - 无法解析远程存储库 npm 元数据

HTTP 400 - Unable to parse remote repository npm metadata

我们在虚拟存储库中有 2 个远程 NPM 注册表。其中之一是 NPM Registry,另一个来自软件提供商。当我将第二个存储库添加到虚拟存储库时,我随机收到 HTTP 400 消息。

例如:如果我想从 npm-registry 安装一个包,我通过日志看到 Artifactory 正试图从另一个存储库(没有该包)获取包并尝试解析响应为 json。来自其他存储库的响应返回一个 html 文件,但会导致以下错误消息:

2017-02-23 09:39:05,424 [http-nio-8080-exec-7112] [ERROR]
(o.a.a.n.r.NpmRemoteRepoHandler:362) - Error while parsing the response of a remote npm 
JSON query on 'https://repository.domain.com/api/npm/public/file-loader': 
Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 
'true', 'false' or 'null')
at [Source:org.artifactory.storage.db.binstore.service.UsageTrackingBinaryProvider$ReaderTrackingStream@7360bc6c; line: 1, column: 2]

如您所见,Artifactory 正在尝试从其他存储库获取包。当我尝试手动获取包时,我们的工件的 JSON 响应是:

{
 "errors" : [ {
 "status" : 400,
 "message" : "Unable to parse remote repository npm metadata."
  } ]
}

任何帮助将不胜感激,因为这会使 NPM 注册表完全无用,因为某些请求返回此 HTTP 400 错误。

仅供参考:我们正在使用 Artifactory Pro 4.5.1

您应该做两件事来避免这种行为

  1. 配置 virtual repository 解析顺序,以便在软件提供商注册表之前访问 NPM 注册表。解析顺序由它们在“选定存储库”列表中的显示顺序控制。
  2. 使用 include/exclude patterns 控制从软件提供商注册表中解析哪些包。假设有一种方法可以识别应从软件提供商处解析的包,您可以定义模式,该模式将限制此注册表仅用于解析某些包。

要检查的另一件事是软件提供商远程存储库是否配置正确。通常它不应该 return 对 API 调用的 HTML 响应。