nestjs开发微信后台获取body回调参数为空

513 阅读2分钟

由于业务需要实现一个关注公众号登录的功能,需要从微信回调中获取到用户的关注信息,就去查了一下官方的文档

image.png

用户关注的时候会给我提供的回调地址发一条消息,消息内容有用户id、事件内容什么的,那实现起来也不难嘛

但是...拿body的时候,用了@Query、@Body、@Param,无论怎么拿,就是拿不到文档里提到的xml数据包,简直怀疑人生

于是我把拿到的请求参数直接全部打印出来,看看到底是个什么怪物,结果定眼一看,好家伙 image.png

这什么啊,什么啊,body为什么是个空对象啊?

你作为post请求的尊严呢?

吓得我赶紧往上翻了翻

image.png

image.png

为什么啊,为什么一个post请求的参数会出现在url上啊?

虽然有点怀疑人生,但需求还是要做的,即使他的参数是在url上,这些内容也不是我需要的xml信息

本着打破沙锅问到底也要完成任务的决心,继续上网查资料,最后在廖神的网站上找到了答案

image.png

这尼玛也太坑爹了吧,腾讯你能不能让开发者省点心啊,尊重一下开发规范好伐?

但是抱怨归抱怨,生活还是要继续,功能还是要开发,产品的刀已经架在脖子上了,不上也得上,最后在某位B姓大佬的博客上找到了答案。

其实解决办法操作起来很简单

首先

安装两个依赖

yarn add body-parser body-parser-xml

然后,把这两个神圣的依赖放进你的main.ts(格式是这样,就不写太详细了)

const bodyParser = require('body-parser');

require('body-parser-xml')(bodyParser);


app.use(

  bodyParser.xml({

      xmlParseOptions: {

          explicitArray: false, // 始终返回数组。默认情况下只有数组元素数量大于 1 是才返回数组。\

      },

  }),

);

重启你的项目

问题解决了T.T

就这破玩意搞了我差不多一个下午

你学废了吗?