【问题标题】:Error: getaddrinfo ENOTFOUND when sending https request Node.js and API错误:发送 https 请求 Node.js 和 API 时出现 getaddrinfo ENOTFOUND
【发布时间】:2021-04-22 19:44:32
【问题描述】:

我正在开发仪表板,我需要连接到 API 并捕获 Auth Token,然后使用 HTTPS 协议发送信息。我使用 Nodejs,当我运行代码时,pm2 监视器上出现下一个错误:

Error: getaddrinfo ENOTFOUND my.url.net/path
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26) {
errno: -3008,
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'my.url.net/path'
}

这也是我提出请求的代码(Node.js):

const path = require('path');
require('dotenv').config({path: path.join('path','.env')});
const https     = require('https');
const database = require('./sql');
const fs         = require ('fs');

const user = process.env.USER;
const pwd  = PWD;
const host = 'https://my.url.net/extencio';
const host_1 = 'my.url.net/extention';

async function getLoginToken(pForce){

 if (login_token.Health && !pForce) { return login_token }

  //Creates the POST request
  const options = {
    protocol: 'https:',
    hostname: host_1,
    path: '/api/auth/token',
    method: 'POST',
    headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
        }
  };

  //Body of the POST request, contains the user and password
  const post_data = JSON.stringify({username: user, password: pwd});
.

下面是剩下的代码:

return new Promise((resolve, reject) => {

    const req = new https.request(options, (response) => {
      response.setEncoding('utf8');
      response.on('data', function(chunk){
        const output = JSON.parse(chunk);

        if(output.token){
          login_token.Health = true;
          login_token.Token  = output.token;
          resolve(login_token)
        }

        else{
          login_token.Health = false;
          login_token.Token  = '';
          resolve(login_token);
        }
        
      });
    });
    req.write(post_data);
    req.end();
    
    req.on('error', function(err) {
      console.log(err);
      login_token.Health = false;
      login_token.Token  = '';
      resolve(login_token)
    });
    
  });
}

【问题讨论】:

  • 但是你没有在这段代码的任何地方发出任何 HTTP 请求
  • 对不起,我的意思是 HTTPS
  • 但是你没有在这段代码的任何地方发出任何 HTTPS 请求
  • 我已经更新了问题

标签: javascript node.js ssl npm https


【解决方案1】:

似乎正在尝试获取完整 url 的 addrinfo,而不仅仅是主机名。我会将主机名放入选项中,仅作为“my.url.net”,并使用其余的 url 更新路径。

【讨论】:

  • @Eric0607 你的意思是你尝试过 "protocol":"https", "hostname": "my.url.net", "path": "extention/api/auth/token" (我不确定路径是否正常,但它基于您的设置)请注意协议不是“https:”
  • 是的,我的意思是协议 https, "hostname" "my.url.net/extention", "path" "/api/auth/token" 我需要使用 https 协议,因为我有 SSL证书,当我从 http 进行更改时,我收到错误,只有 https 被指定:错误:getaddrinfo ENOTFOUND my.url.net/extention/api/auth/token at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67 :26) { errno:-3008,代码:'ENOTFOUND',系统调用:'getaddrinfo',主机名:'my.url.net/extention/api/auth/token'}
  • 所以不,你没有阅读。 “主机名”:“my.url.net”而不是“my.url.net/extention”。此外,您没有很好地阅读您在问题中编写的协议:它应该是“https”而不是“https:”,因为它没有冒号。
  • 我按照它的说法进行了更改,现在我有了 HOST: my.url.net Path: /Ext/api/auth/token 但现在我有这个错误stackoverflow.com/questions/65810720/… 任何想法。非常感谢您的帮助
【解决方案2】:

@Eric0607 您提供的错误 stackoverflow.com/questions/65810720/... 不再显示,我可能来不及回复了。

但如果您遇到“一个无效的本地证书 SSL 错误”,我发现这是一个适用于它的修复程序。 disable SSL check in your code,不推荐,但它会暂时起作用,完成后打开它,否则可能会有风险。

【讨论】:

    【解决方案3】:

    删除协议,只为主机使用域名。例如:

    错误:

    const host = 'https://my.url.net/extencio'
    const path = '/api/auth/token'
    

    正确:

    const host = 'my.url.net'
    const path = '/extencio/api/auth/token'
    

    有关http.request 选项,请参阅documentation

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 2021-05-10
      • 2019-01-06
      • 2021-08-10
      • 1970-01-01
      • 2021-05-30
      • 2019-02-15
      • 1970-01-01
      • 2022-11-04
      相关资源
      最近更新 更多