【问题标题】:nodejs environment variable "NODE_EXTRA_CA_CERTS"nodejs 环境变量“NODE_EXTRA_CA_CERTS”
【发布时间】:2017-06-09 14:09:57
【问题描述】:

我正在开发一个基于 Ionic + Angular + Cordova + Node js 的移动应用程序。

应用程序通过 window.XMLHttpRequest 访问 https 服务器:

module.exports = function request (method, url, body, headers) {
  return new Promise(function (resolve, reject) {
    var xhr = new window.XMLHttpRequest()

    xhr.open(method, url)

    xhr.onload = function () {
      return resolve({
        status: xhr.status,
        body: xhr.responseText
      })
    }

    xhr.onerror = xhr.onabort = function () {
      return reject(new Error(xhr.statusText || 'XHR aborted: ' + url))
    }

    Object.keys(headers).forEach(function (header) {
      xhr.setRequestHeader(header, headers[header])
    })

    xhr.send(body)
  })
}

要执行此功能,需要将适当的根 CA 插入节点环境。 因为我不控制发出 https 请求的代码,所以我更喜欢基于策略/配置的方法,它可以在节点 js 中启用额外的根 CA。

我四处寻找,发现节点实际上提供了一个似乎符合我目的的环境变量“NODE_EXTRA_CA_CERTS”。

但我找不到任何关于如何使用此变量的示例。

我的实现是安装npm包dotenv-webpack

添加了一个 .env 文件,其中包含配置“NODE_EXTRA_CA_CERTS=./assets/cert/cacert.pem”(相应根 CA 的文件路径)。

我可以验证变量 NODE_EXTRA_CA_CERTS 是否已成功设置。但它似乎没有任何效果。由于安全原因,访问服务器被拒绝。

所以我的问题是:谁能提供一个关于如何使用变量“NODE_EXTRA_CA_CERTS”的示例?

谢谢

【问题讨论】:

    标签: node.js angular ssl ionic2 tls1.2


    【解决方案1】:

    所以您所说的环境变量是在“系统”级别提供的,因此您不需要在 env 文件中本地定义变量。

    如果你想访问变量,你应该在 dotenv-webpack 上使用以下配置:

    Dotenv({
      systemvars: true
    })
    

    这将允许您访问系统级变量。要访问变量,您将使用变量:process.env.NODE_EXTRA_CA_CERTS

    • process 存储有关正在运行的节点进程的信息。
    • env 存储所有环境变量(由dotenv-webpack 填充)。

    您可以在此处阅读有关 process 全局变量的更多信息:https://nodejs.org/api/process.html

    【讨论】:

      猜你喜欢
      • 2014-08-28
      • 1970-01-01
      • 2020-01-23
      • 2013-03-11
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2021-06-18
      • 2019-05-11
      相关资源
      最近更新 更多