在使用 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!
文章大纲
← Previous postNode.js 第二部分
Next post →使用模块别名简化你的Node.js项目
