云函数调用第三方 API 问题

2022-11-26 17:34:40 +08:00
 sonders

当我在 uniapp 的云函数中使用

const url = "https://xxx.xx.xx"
const res = await uniCloud.httpclient.request(url, {
    method: 'GET',
    contentType: 'json', // 指定以 application/json 发送 data 内的数据
    dataType: 'json', // 指定返回值为 json 格式,自动进行 parse
    timeout: 30*1000
})

本地调试完全正常,但是上传云函数时,报错

 Error: [addNewsHeNan]: ENOTFOUND:getaddrinfo ENOTFOUND xxx.cn xxx.cn:443, GET https:/xxx  -1 (connected: false, keepalive socket: false, agent status: {"createSocketCount":1,"createSocketErrorCount":0,"closeSocketCount":0,"errorSocketCount":1,"timeoutSocketCount":0,"requestCount":0,"freeSockets":{},"sockets":{"xxxx:443:::::::::":1},"requests":{}}, socketHandledRequests: 1, socketHandledResponses: 0)  
headers: {}


Error: getaddrinfo ENOTFOUND v.api.aa1.cn v.api.aa1.cn:443
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26)

url 是一个 API 接口,在浏览器中可直接调用,本地调试也完全正常,但是上传并运行时就会报错,

另: 在写代码时,突然发现顶部不知道什么引入了一个```js import resolve from 'dns'

看到后就删除了,但不知道该问题是否由它引起,这个云函数之前都是能够正常运行的

请教大佬有没有人帮忙看看
916 次点击
所在节点    问与答
6 条回复
helone
2022-11-26 18:03:43 +08:00
Error 其实已经很清晰了,getaddrinfo ENOTFOUND v.api.aa1.cn v.api.aa1.cn:443 ,你可以 import resolve from 'dns' 这行加回去试试,我猜大概率是解析域名用的
sonders
2022-11-26 18:37:11 +08:00
@helone 可是在之前的代码里并没有这个引用,这个应该是代码自动提示导致自动引入的,我引入之后反而报错了
eason1874
2022-11-26 18:44:47 +08:00
先确定云函数能不能访问外网,有些厂商的云函数如果开启了 VPC 支持就会默认禁用公网访问,需要再手动开启
Puteulanus
2022-11-26 18:50:02 +08:00
感觉像云函数没有连公网。。
sonders
2022-11-26 20:04:44 +08:00
@eason1874 其他云函数也有访问第三方 api 的,都是正常的
sonders
2022-11-26 20:05:11 +08:00
@Puteulanus 不可能单这一个没连吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/898122

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX