从Request迁移到Got库的完整指南

从Request迁移到Got库的完整指南

got 🌐 Human-friendly and powerful HTTP request library for Node.js got 项目地址: https://gitcode.com/gh_mirrors/go/got

前言

在Node.js生态系统中,Request曾经是最流行的HTTP客户端库之一。但随着现代JavaScript的发展,Request已经停止维护。Got库作为其优秀替代品,提供了更现代化、更强大的功能。本文将详细指导开发者如何从Request平滑迁移到Got。

基础用法对比

让我们从最基本的HTTP请求开始比较:

Request方式

import request from 'request';

request('https://google.com', (error, response, body) => {
    console.log('error:', error);
    console.log('statusCode:', response && response.statusCode);
    console.log('body:', body);
});

Got方式

import got from 'got';

try {
    const response = await got('https://google.com');
    console.log('statusCode:', response.statusCode);
    console.log('body:', response.body);
} catch (error) {
    console.log('error:', error);
}

关键差异点:

  1. Got默认使用Promise/async-await,而非回调函数
  2. 错误处理采用try-catch机制
  3. 响应数据整合在response对象中,结构更清晰

选项参数对照

保持不变的选项

Got保留了以下与Request相同的选项:

  • url - 请求地址
  • body - 请求体
  • followRedirect - 是否跟随重定向
  • encoding - 编码格式
  • maxRedirects - 最大重定向次数
  • headers - 请求头

重命名的选项

为了更好的可读性,Got对一些选项进行了重命名:

| Request选项 | Got对应选项 | 说明 | |------------|------------|------| | qs | searchParams | 查询参数 | | strictSSL | rejectUnauthorized | SSL证书验证 | | gzip | decompress | 响应解压缩 | | jar | cookieJar | Cookie管理 | | jsonReviver | parseJson | JSON解析器 | | jsonReplacer | stringifyJson | JSON序列化 |

行为变更的选项

  1. agent选项现在是一个包含httphttpshttp2属性的对象
  2. timeout选项现在是对象形式,可以设置特定事件的超时
  3. searchParams总是使用URLSearchParams进行序列化
  4. 自定义查询字符串需要通过url选项传递

重大变更点

1. JSON和表单处理

  • json选项不再是布尔值,而是对象,会被自动序列化为请求体
  • form选项也是对象,会被序列化为application/x-www-form-urlencoded格式

2. 头部处理

所有头部名称都会被转换为小写,符合HTTP规范要求。

3. 移除的功能

  • 移除了oauthhawk等认证方式
  • 移除了agentClassagentOptions等选项
  • 移除了forever选项(需使用keepAlive的agent替代)
  • 移除了proxy选项(需自定义agent实现)

4. 认证方式变更

  • 不再使用auth选项,改用username/password或手动设置authorization头部

流处理对比

Request的流式处理示例:

http.createServer((serverRequest, serverResponse) => {
    if (serverRequest.url === '/doodle.png') {
        serverRequest.pipe(request('https://example.com/doodle.png')).pipe(serverResponse);
    }
});

Got的等效实现:

import {pipeline as streamPipeline} from 'node:stream/promises';
import got from 'got';

const server = http.createServer(async (serverRequest, serverResponse) => {
    if (serverRequest.url === '/doodle.png') {
        await streamPipeline(
            got.stream('https://example.com/doodle.png'),
            serverResponse
        );
    }
});

Got同样支持流的头部代理功能,且使用了Node.js现代的stream/promises模块。

实用方法对照

  1. HTTP方法快捷方式:request.get()got.get()
  2. 默认配置:request.defaults()got.extend()
  3. Cookie处理:需直接使用tough-cookie库

迁移建议

  1. 逐步迁移:可以先从简单的GET请求开始,逐步处理复杂场景
  2. 利用Hooks:Got的Hooks系统非常强大,可以替代Request的许多扩展功能
  3. 错误处理:注意从回调模式切换到try-catch模式
  4. 测试验证:迁移后务必进行充分测试,特别是边缘场景

总结

虽然从Request迁移到Got需要一些调整,但Got提供了更现代化、更强大的功能集。通过本文的对照指南,开发者可以系统地完成迁移工作。Got的优秀文档和完善的功能使其成为Node.js HTTP客户端的最佳选择之一。

对于更高级的用法,建议深入研究Got的文档,特别是关于Hooks和自定义实例的部分,这将帮助您充分发挥Got的全部潜力。

got 🌐 Human-friendly and powerful HTTP request library for Node.js got 项目地址: https://gitcode.com/gh_mirrors/go/got

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许煦津

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值