首页 > 解决方案 > nodejs http请求getaddrinfo ENOTFOUND错误

问题描述

我尝试了很多方法来发出 http 请求,但总是出错getaddrinfo ENOTFOUND

环境:nodejs 提供者:Firebase Functions

方法 1 - npm 请求

var options = {
     url: 'https://us-central1-<project>.cloudfunctions.net/api/wakeUp',
     headers: { "Authorization": "Basic password" }
 };

 function callback(error, response, body) {
     if (!error && response.statusCode == 200) {
       console.log(body)
     }
     console.log(error)
   }

   request(options, callback);

方法 2 - npm jquery

$.ajax({
    headers:{"Authorization":"Basic password"},
    url: "https://us-central1-<project>.cloudfunctions.net/api/wakeUp",
    type: 'GET',
    contentType: "application/x-www-form-urlencoded",
    success: function (data) {
        console.log(data)

    },
    error: function (error) {
        console.log(error);
    }
})

方法 3 - npm https

var options = {
    url: 'us-central1-<project>.cloudfunctions.net',
    port: 443,
    path: '/api/wakeUp',
    method: 'GET',
    headers: { "Authorization": "Basic password" }
};

const req = https.request(options, (res) => {
    console.log('statusCode:', res.statusCode);
    console.log('headers:', res.headers);

    res.on('data', (d) => {
        console.log(d)
    });
});

req.on('error', (e) => {
    console.error(e);
});
req.end();

无论哪种方式,控制台总是显示错误getaddrinfo ENOTFOUND :443

实在是想不通了,求指教。

边注:

1)出于隐私和安全问题,我从请求中屏蔽了 URL 和密码。

2)我已经实现了中间件来检查授权。因此,如果在浏览器中打开 URL,它将显示“未经授权”,但如果我使用 Postman 发送带有标头的 GET 请求"Authorization": "Basic password",它将按预期显示 API 结果。

3)API的代码和http请求代码在同一个firebase函数服务器/项目中。

4)nodejs导入了以下模块,不确定是不是引起了某种冲突:firebase-functions, firebase-admin, jsdom, request, https, express, body-parser, cors, jquery,nodemailer

标签: jqueryfirebasehttpsxmlhttprequestgoogle-cloud-functions

解决方案


推荐阅读