首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Axios + Express.js连接API时获取"EHOSTUNREACH“

使用Axios + Express.js连接API时获取"EHOSTUNREACH“
EN

Stack Overflow用户
提问于 2021-12-25 16:50:39
回答 2查看 3.1K关注 0票数 2

我开始玩飞利浦顺桥API,使用邮递员发送请求。我能够验证自己,创建一个用户,甚至成功地打开或关闭灯。结论:我能够达到该API。

接下来,我使用Node.js和axios@0.21.4做了一个小型测试javascript文件来完成完全相同的工作。当我尝试以下代码时,一切正常,并收到预期的JSON响应:

代码语言:javascript
运行
复制
const axios = require('axios')

axios({
    method: 'GET',
    url: 'http://philips-hue.local/api/BYLCIlxABzz2eDHAxx70T'
})
    .then(({data}) => {
        console.log('------> AXIOS RES: ', data)
    })
    .catch((err) => {
        console.log('------> AXIOS ERR: ', err)
    })

结论: Axios能够与API进行通信。

接下来,我想将其构建到Express.js端点中。然而,当我试图在express@4.17.1中使用相同的代码时,我会得到一个错误:

代码语言:javascript
运行
复制
router.route('/getlights').get((req, res) => {
    axios({
        method: 'GET',
        url: 'http://philips-hue.local/api/BYLCIlxABzz2eDHAxx70T/lights'
        })
        .then(({data}) => {
            console.log('------> AXIOS RES: ', data)
            res.json({
                state: 'SUCCESS',
                data
            })
        })
        .catch((err) => {
            console.log('------> AXIOS ERR: ', err)
            res.json({
                state: 'ERROR',
                err
            })
        })
})

响应:

代码语言:javascript
运行
复制
{
    "state": "ERROR",
    "err": {
        "message": "connect EHOSTUNREACH 192.168.0.107:80",
        "name": "Error",
        "stack": "Error: connect EHOSTUNREACH 192.168.0.107:80\n    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16)",
        "config": {
            "url": "http://philips-hue.local/api/BYLCIlxABzz2eDHAxx70T/lights",
            "method": "get",
            "headers": {
                "Accept": "application/json, text/plain, */*",
                "User-Agent": "axios/0.21.1"
            },
            "transformRequest": [
                null
            ],
            "transformResponse": [
                null
            ],
            "timeout": 0,
            "xsrfCookieName": "XSRF-TOKEN",
            "xsrfHeaderName": "X-XSRF-TOKEN",
            "maxContentLength": -1,
            "maxBodyLength": -1
        },
        "code": "EHOSTUNREACH"
    }
}

我开始解决这个问题,首先尝试将网址更改为像http://jsonplaceholder.typicode.com/posts/1这样的随机在线位置持有者,看看我是否可以建立任何连接。这个马上就起作用了。

这就是我真正感到困惑的地方。为什么我能够在javascript文件中使用Postman或Axios成功地与桥进行通信,但在express使用相同的Axios代码时却无法与之连接。这些问题似乎只有在使用axios和express连接到桥API时才会出现。

我已经尝试过用node-fetch和其他3种版本的Axios重新测试它。所有的测试都以同样的方式失败了。代码本身总是可以连接到API,但是一旦代码被express调用,它就会导致EHOSTUNREACH错误。

我没有关于如何进一步搜索这个问题的想法,因为我不确定到底是什么引起了这个问题(表达式和/或axios和/或bridge)。任何解决问题的想法或谷歌关键字也非常欢迎。:)

EN

回答 2

Stack Overflow用户

发布于 2022-02-10 16:31:02

我也犯了同样的错误,出于某种原因,我的色调桥的ip地址发生了变化,于是我进入智能手机上的色调应用程序,复制了新的ip地址。如果这有帮助的话,我在这里很新。

票数 0
EN

Stack Overflow用户

发布于 2022-11-08 16:46:46

从昨天起,我也犯了同样的错误,无法找到解决办法。真正导致我的原因是,在我调用的第三方api上有一个承载令牌,我也通过头传递它。

因此,它被移除,并通过报头传递令牌,它运行良好。

更新:如果发送另一个请求,错误将不断出现。我找到的解决方案是使用request

代码语言:javascript
运行
复制
const request = require('request');
const headers = {
    'Content-Type': 'application/json',
    'token': `${token}`
};
const data = {
       username : 'username'
}
let options = {
       method: 'POST',
       url: 'url',
       port: 443,
       headers: headers,
       body: data,
       json: true
};

request(options, async (error, res, body) => {
       if (error) {
           console.log({error});
           return response.status(500).json({
               status: false,
               message: "Error occured"
           });
       } else {
           console.log({body});
           return response.status(201).json({
               message: "success"
           });
       }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70481456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档