windows 环境下使用 Node.js 访问 SAP OData 遇到 unable to get local issuer certificate

简介: windows 环境下使用 Node.js 访问 SAP OData 遇到 unable to get local issuer certificate

我有一个 OData 服务,部署在 SAP S/4HANA 服务器上,浏览器里通过如下 url,可以正常访问到其元数据:



我编写了一个 node.js 应用,通过编程的方式访问这个 OData 服务的元数据:



var request = require('request');
var url = 'https://ldai2xxx:44356/sap/opu/odata/sap/ZBOOK_MANAGE_SRV/$metadata';
var oOptions = {
    url: url,
    method: 'GET'
  };
var oPromise = new Promise(function(resolve,reject){
  request.get(oOptions,function(error,response,body){
      if(error){
        console.log("error occurred: " + error);
        reject(error);
    }
        resolve(body);
    });
});
oPromise.then((data) => console.log(data));


使用 node 执行上面的代码,遇到如下错误消息:


error occurred: Error: unable to get local issuer certificate

(node:33376) UnhandledPromiseRejectionWarning: Error: unable to get local issuer certificate

at TLSSocket.onConnectSecure (_tls_wrap.js:1497:34)

at TLSSocket.emit (events.js:315:20)

at TLSSocket._finishInit (_tls_wrap.js:932:8)

at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:706:12)

(Use node --trace-warnings ... to show where the warning was created)

(node:33376) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)

(node:33376) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.




在应用程序生成过程中,当用户连接的系统使用 SSL 支持安全 HTTPS 流量时,可能会出现无效安全证书错误。 在某些情况下,证书是使用用户操作系统未知的本地证书颁发机构生成的。 如果发生这种情况,应用程序生成器会拒绝连接请求并报告错误。


解决方案

windows 环境下设置环境变量,使用 set 语法,命名后不加空格,直接附上两个 &&, 然后空格,跟上新的命令。


set NODE_TLS_REJECT_UNAUTHORIZED=0&& node ag3.js


这种解决方案的用意是,设置环境变量 NODE_TLS_REJECT_UNAUTHORIZED 的值为 0,暂时禁用 SSL certificate 的校验。


执行之后,看到警告消息:


Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to ‘0’ makes TLS connections and HTTPS requests insecure by disabling certificate verification.


提示我们,这个环境变量的设置,禁掉了 certificate 验证,让 TLS 连接和 HTTPS 请求变得不再安全。

收到 401 状态码,说明与服务器的连接终于通了:




有朋友反馈:


Hi,Jerry: 我现在使用vscode发布fiori应用时也碰到这个问题了。我按你说的,设置了一个环境变量:NODE_TLS_REJECT_UNAUTHORIZED=0,但是还是报这个错误。有方法解决吗?


那么试试笔者这篇文章介绍的办法:


相关文章
|
3月前
|
缓存 JavaScript 前端开发
在js中get和post的区别
在js中get和post的区别
40 0
|
3月前
|
JavaScript 前端开发 算法
Node.js中的process.nextTick与浏览器环境中的nextTick有何不同?
Node.js中的process.nextTick与浏览器环境中的nextTick有何不同?
|
2月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
27 0
|
3月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)(上)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
29 0
|
19天前
|
开发框架 JavaScript 中间件
node+express搭建服务器环境
node+express搭建服务器环境
node+express搭建服务器环境
|
3月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)(下)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
26 0
|
1月前
|
JavaScript 前端开发 Java
如何使用内网穿透实现远程公网访问windows node.js的服务端
如何使用内网穿透实现远程公网访问windows node.js的服务端
|
1月前
|
Web App开发 JavaScript 前端开发
Windows 10上安装Node.js的初学者指南
Node.js是是一个强大的JavaScript运行时环境,建立在Chrome的V8 JavaScript引擎上,让你能够在服务器端运行JavaScript。 通过本教程,你将学会如何设置Node.js和npm(节点包管理器等现代Web开发的必备工具。无论你是希望构建Web应用程序、创建服务器端脚本,还是涉足全栈开发,安装Node.js都是你的第一步。那么,让我们开始吧!
|
3月前
|
资源调度 JavaScript API
配置Typescript+Node环境
配置Typescript+Node环境
38 0
|
3月前
|
JavaScript
Vue3 + Typescript + Node.js 搭建elementUI使用环境
Vue3 + Typescript + Node.js 搭建elementUI使用环境
43 0