nodejs环境变量“NODE_EXTRA_CA_CERTS”

时间:2017-06-09 14:09:57

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

我正在开发基于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请求的代码,所以我更喜欢基于策略/配置的方法,它可以将额外的根CA转换为节点js。

我四处搜索,发现该节点实际上提供了一个似乎符合我目的的环境变量“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'的例子吗?

谢谢

1 个答案:

答案 0 :(得分:2)

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

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

Dotenv({
  systemvars: true
})

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

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

您可以在此处详细了解process个全局变量:https://nodejs.org/api/process.html