首页 > 解决方案 > NodeJS - 无法确定/验证传入的表单数据,因为所有这些数据都被视为字符串

问题描述

最近我一直在尝试使用来自 Postman 的“表单数据”请求进行验证。
我注意到每次我尝试验证/过滤传入的变量时,它们都是字符串,即使这些字符串值可以转换为数字/布尔值等 - 因为我想验证它们的“真实”类型是。
在尝试寻找解决方案时,我尝试使用“typeof”和以下依赖项:“ validator ”、“ express-validator ”。我必须提到 body-parser 已经到位:

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

他们都被“愚弄”并将变量视为字符串。我假设发生的事情是由于 body-parser 的实现方式,它们都被解析为 JSON,这导致它们成为字符串。假设这一点,我尝试使用JSON.parsewhich 效果很好(例如在数字上尝试时),但在字符串上使用时崩溃:

SyntaxError: Unexpected token D in JSON at position 0

“D”是字符串(“Doe”)的开头,它在尝试解析第一个字母后崩溃。

问题是,我确实想将传入的请求解析为 JSON,但我确实想过滤,例如数字作为名字发送。

实现/过滤传入表单数据的最佳方法?
谢谢你。

编辑:
添加了描述请求的图片,除了显示的标题之外没有其他标题。 在此处输入图像描述

标签: jsonnode.jsstringform-databody-parser

解决方案


根据您发布的屏幕截图,您没有将 JSON 发布到服务器。这解释了解析 JSON 时的语法错误。

您正在解析的是与 JSON 格式不同的表单数据。表单数据如下所示:

Content-Type: multipart/form-data;boundary="boundary" 

--boundary 
Content-Disposition: form-data; name="firstName" 

John 
--boundary 
Content-Disposition: form-data; name="lastName"

Doe
--boundary 
Content-Disposition: form-data; name="street"

Example Address

.... etc

显然,上面看起来不像 JSON。

要发送 JSON,您必须选择“原始”格式,然后粘贴您自己手动构建的 JSON 数据。


推荐阅读