You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fastify响应XML的惯用写法?如何优化重复代码实现DRY?

Fastify XML响应代码复用方案

Fastify提供了几种惯用方式来避免重复编写XML响应的代码,遵循DRY原则,下面是具体实现:

1. 装饰reply对象,添加自定义方法

给reply装饰一个sendXml方法,直接在路由里调用就能完成类型设置和XML转换:

// 在Fastify实例初始化后注册装饰器
fastify.decorateReply('sendXml', async function (obj) {
  await this.type('application/xml').send(obj.toXmlString());
});

之后在任意路由里,只需一行代码即可返回XML响应:

reply.sendXml(someObject);

2. 使用onSend钩子批量处理

如果你的XML响应路由有统一标识,可以通过路由配置标记,再用全局钩子自动处理:

// 注册全局onSend钩子
fastify.addHook('onSend', async (request, reply, payload) => {
  // 检查当前路由是否标记为需要XML响应
  if (reply.context.config.xmlResponse && typeof payload === 'object') {
    reply.type('application/xml');
    return payload.toXmlString();
  }
  return payload;
});

定义路由时添加标记:

fastify.get('/user/profile', {
  config: { xmlResponse: true }
}, async (request, reply) => {
  // 直接返回对象,钩子会自动转为XML并设置响应类型
  return userProfileObject;
});

3. 自定义响应序列化器

利用Fastify的序列化器机制,针对application/xml类型设置全局序列化逻辑:

// 注册XML类型的序列化器
fastify.addSerializer('application/xml', (payload) => {
  return payload.toXmlString();
});

之后在路由里只需指定响应类型并发送对象,序列化器会自动处理转换:

await reply.type('application/xml').send(someObject);

内容的提问来源于stack exchange,提问作者Caleb St-Denis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:22:13