Node.js的Express参数获取及获取POST请求的请求体
Hi I'm Shendi
在之前介绍过 Express 的使用,但是没有介绍参数部分的获取,于是在这里记下
获取url参数
在 http 中,参数大致分为链接上的参数与请求体
获取 url 参数很简单,Express将所有url参数放到了请求的 query 对象中
例如链接为 sdpro.top?name=Shendi&age=20
代码如下
router.get('/', (req, res, next) => {
let name = req.query.name;
let age = req.query.age;
console.log(`name=${name}, age=${age}`);
});
效果如下
获取请求体数据
我是因为这部分才来写这篇文章的,因为在我看来,一个Web框架,获取参数的话应当是非常简单的,通过IDE提示大概就知道用什么参数
但是Express实际上没有提供获取请求体数据的方法,网上说的大体都是使用第三方包 body-parser
但是本着能减少依赖就减少依赖的想法,我在IDE通过代码提示查看req拥有的属性和函数,觉得可能的就进行尝试,然后找到个 read 函数
函数返回Buffer类型,经过尝试后成功获取到了请求体
console.log(req.read().toString());
下面示例是我在编写微信公众号后端,发送消息后推送的请求
下面是read函数的注释翻译
readable.read()方法从内部缓冲区中读取数据并返回。如果没有可用的数据可供读取,则返回null。默认情况下,除非使用可读的.setEncoding()方法指定了编码,或者流在对象模式下运行,否则数据将作为Buffer对象返回。
可选的size参数指定要读取的特定字节数。如果大小字节无法读取,则返回null _unless _流已结束,在这种情况下,将返回内部缓冲区中剩余的所有数据。
如果未指定size参数,则将返回内部缓冲区中包含的所有数据。
size参数必须小于或等于1 GiB。
readable.read()方法只能在以暂停模式运行的readable流上调用。在流动模式下,readable.read()会被自动调用,直到内部缓冲区完全耗尽。
这个方法是我自己摸索出来的,不知道可不可靠,在官方的API文档中也没有这个函数
但是根据函数注释,感觉还是没有问题的,也可以选择使用网上说的增加 body-parser 依赖的方式去获取请求体
但对我来说,效果已经实现了,目前看来还是没有任何问题的...
补充
今天在开发中尝试用 read
读取请求体,为 null
,想到可能是请求体还未处理完成?加上 setTimeout(()=>{req.read()},0)
这样就没问题了。但总感觉这样不太好。
于是查阅文档(文档更新了),找到了 req.body
的说明:https://nodejs.cn/express/4x/api/req/#body
其中有说到,当使用 express.json()
或 express.urlencoded()
时不为空,而 urlencoded
就是通常 post 请求的响应体参数类型,如下,这种方式也不用自己转换解析了,可以与 req.params
相似的方式使用。
app.use(express.urlencoded({ extended: true }));
app.post('/profile', function (req, res, next) {
console.log(req.body);
console.log(req.body.id);
});
END
本文链接:https://sdpro.top/blog/html/article/1095.html♥ 赞助 ♥
尽管去做,或许最终的结果不尽人意,但你不付出,他不付出,那怎会进步呢?