shfshanyue / Daily-Question

互联网大厂内推及大厂面经整理,并且每天一道面试题推送。每天五分钟,半年大厂中
https://q.shanyue.tech
4.92k stars 510 forks source link

【Q632】在 Node 中如何发送请求 #650

Open shfshanyue opened 3 years ago

shfshanyue commented 3 years ago

如果使用原生 API,可使用 http/https 核心模块

const https = require('https');

https.get('https://icanhazip.com', (res) => {
  console.log('statusCode:', res.statusCode);
  console.log('headers:', res.headers);
  let data = ''

  res.on('data', (chunk) => {
    data += chunk
  })

  res.on('end', () => {
    console.log(data)
  })

}).on('error', (e) => {
  console.error(e);
});

如果使用第三方库的话,可使用 axios 等。

目前,Node 团队抛弃了核心模块 http/https 从头开发了一个新的 http client,名为 undeci,将有可能成为以后默认的 http client

import { request } from 'undici'

const {
  statusCode,
  headers,
  trailers,
  body
} = await request('http://localhost:3000/foo')

console.log('response received', statusCode)
console.log('headers', headers)

for await (const data of body) {
  console.log('data', data)
}