简介
@aws-sdk/middleware-serializer 是用于在 AWS SDK for JavaScript (V3) 中自动生成 HTTP 请求体和响应正文的中间件。它使开发人员可以将参数自动序列化为 JSON 或表单编码格式,并将响应体自动反序列化为 JavaScript 对象。
安装
@aws-sdk/middleware-serializer 可以通过 npm 进行安装:
npm install @aws-sdk/middleware-serializer
使用
可以通过创建一个新的 SDK 对象(由 @aws-sdk/client-*-package 创建)并向客户端添加序列化器中间件来使用序列化器中间件。
-- -------------------- ---- ------- ------ - --------- ---------------- - ---- --------------------- ------ - -------------------- - ---- --------------------------------- ----- -- - --- ---------- ------- ------------ ---------------- ----------------------- --- ----- ------ - - ------- ----------------- ---- ----------------- -- ----- ------- - --- ------------------------- ----- -------- - ----- ----------------- ----------------------
在上面的示例中,我们创建了一个包含序列化器中间件的 S3 客户端,并使用 GetObjectCommand 将 S3 对象名称指定为参数。然后,使用 S3Client 发送命令以获取对象。
深入了解
默认情况下,AWS SDK for JavaScript (V3) 在发送请求时将参数转换为 JSON 对象,并使用相应的内容类型标头来指示 AWS 服务将响应正文解释为 JSON。但是,有时可能需要使用表单编码格式来发送参数,或者将响应正文解释为其他格式(例如 XML)。
幸运的是,@aws-sdk/middleware-serializer 允许用户配置序列化和反序列化行为。序列化器中间件提供两个选项:
- serialize
- deserialize
这两个选项都是函数对象,它们接受参数和响应体并返回序列化或反序列化后的字符串或对象。
下面是一个自定义序列化和反序列化的示例:
-- -------------------- ---- ------- ------ - --------- ---------------- - ---- --------------------- ------ - -------------------- - ---- --------------------------------- ------ - -- ----------- ---- -------------- ----- -- - --- ---------- ------- ------------ ---------------- - -------------------------------- ---------- ------- ---- -- - ------ ----------------------------- -- ------------ -------- ---- -- - ------ -------------------------- -- --- -- --- ----- ------ - - ------- ----------------- ---- ----------------- -- ----- ------- - --- ------------------------- ----- -------- - ----- ----------------- ----------------------
在上面的示例中,我们使用 querystring 库将参数和响应体序列化为表单编码格式和反序列化为 JavaScript 对象。这里也可以使用其他任何库。
结论
@aws-sdk/middleware-serializer 是一个非常有用的中间件,可帮助您自动将参数和响应体序列化和反序列化为 JSON 或表单编码格式。我们也看到了如何自定义序列化和反序列化逻辑,以及如何向客户端添加中间件。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5f6eecd2a9b7065299ccba21