在使用 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)
// Now you can use json data...
} catch (err) {
console.error(`Failed to parse JSON data - ${err.toString()}`)
}
})
})
.on('error', (err) => {
console.error(`Failed to make request! 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
事件。
就是这样!现在让我们把这个逻辑抽象成一个可以在 server
中任何地方使用的函数:
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)
// 使用获取到的数据...
Good luck!
On this page
← Previous post[第二部分] 以最简单的方式在 Namecheap 上部署和配置你的网站
Next post →使用模块别名简化你的Node.js项目