xml
是作为一种比较老的 数据传输手段,大部分都是传递 json
、form
、buffer
的,现代框架也都是支持这三种数据格式的,都不会自带 xml
格式。
在做微信扫码支付的时候,当支付成功了微信会给你发送 post
请求,这个时候处理请求就会发现 body = {}
+ query = {}
+ params = {}
,这个时候我的内心是崩溃的,啥参数也没有。
查找了很多资料,都说参数就在 body
体内,可是我的 body
是一个空对象,最后参考了express
框架和一些其他的资料,终于决定通过两个依赖来解决这个问题。
最终操作:
yarn add body-parser body-parser-xml
安装完成依赖后修改入口文件 main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
const bodyParser = require('body-parser');
require('body-parser-xml')(bodyParser);
(async () => {
const app = await NestFactory.create(AppModule);
app.use(bodyParser.xml());
await app.listen(9999);
})();
然后这个时候在进行一次支付,支付完成后微信请求过来的数据 body
体内就有一个 xml
对象,剩下的只需要把这个对象进行处理就好了,如:
@Post('bondPay/wechat')
async bondPayWechat(@Req() req): Promise<any> {
const { xml } = req.body;
const data: any = {};
for(const item in xml) {
data[item] = xml[item][0];
}
console.log(data)
}
最终终端打印结果为:
最终大功告成!很多人写这种东西都需要 线上地址
进行测试,但是我来悄悄咪咪的告诉大家有一种工具叫做 内网穿透工具
可以直接进行本地开发测试,指定端口就 ok 了!