在使用 Node.js 时,有许多支持向另一个服务器发起请求的库,如 node-fetch
、phin
、got
或 request
(已弃用)...
然而,如果你的服务器只是作为客户端应用的 API,而你现在需要从另一个服务器请求
一个 JSON
文件或者只是获取外部 API,你应该选择使用哪个库呢?
答案是你不需要为了创建请求而在 package.json
中添加新的依赖,因为 Node.js 有一个名为 https
的内置模块。
HTTPS
https
是 Node.js 预构建的轻量级模块,在大多数 Node.js 版本中都受支持。
你可以使用 https
创建请求
,如下所示:
let https = require('https')
https
.get(url, (res) => {
let body = ''
res.on('data', (chunk) => (body += chunk))
res.on('end', () => {
try {
let json = JSON.parse(body)
// 现在你可以使用 json 数据...
} catch (err) {
console.error(`解析 JSON 数据失败 - ${err.toString()}`)
}
})
})
.on('error', (err) => {
console.error(`请求失败!错误:${err.toString()}`)
})
在上面的代码中:
- https 是 Node.js 中的内置模块,所以你可以直接
require
它,无需安装。 - 你可以使用
https.get(url[, options][, callback])
创建请求。 - 在回调中,你使用
res.on()
监听响应事件。 - 每次触发
res.on("data")
时,你将data
添加到字符串body
中。 - 当触发
res.on("end")
时,你可以简单地使用JSON.parse(body)
将 body 解析为 JSON 对象。 - 第
8
和11
行:注意,你应该在try {} catch() {}
块中解析数据,以捕获 JSON 无法解析时的错误。 - 如果请求失败,将触发
error
事件。
就是这样!现在让我们将这个逻辑抽象成一个可以在服务器
中任何地方使用的函数:
let https = require('https')
let fetchJSON = (url) => {
return new Promise((resolve, reject) => {
https
.get(url, (res) => {
let body = ''
res.on('data', (chunk) => (body += chunk))
res.on('end', () => {
try {
resolve(JSON.parse(body))
} catch (err) {
reject(err)
}
})
})
.on('error', reject)
})
}
module.exports = fetchJSON
你可以这样使用它:
// 异步上下文
let data = await fetchJSON(url)
// 使用数据...
祝你好运!
On this page
← Previous post[第 2 部分] 在 Namecheap 上以最简单的方式部署和配置您的网站
Next post →使用模块别名简化你的 Node.js 项目