json - NodeJS - 无法确定/验证传入的表单数据,因为所有这些数据都被视为字符串
问题描述
最近我一直在尝试使用来自 Postman 的“表单数据”请求进行验证。
我注意到每次我尝试验证/过滤传入的变量时,它们都是字符串,即使这些字符串值可以转换为数字/布尔值等 - 因为我想验证它们的“真实”类型是。
在尝试寻找解决方案时,我尝试使用“typeof”和以下依赖项:“ validator ”、“ express-validator ”。我必须提到 body-parser 已经到位:
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
他们都被“愚弄”并将变量视为字符串。我假设发生的事情是由于 body-parser 的实现方式,它们都被解析为 JSON,这导致它们成为字符串。假设这一点,我尝试使用JSON.parse
which 效果很好(例如在数字上尝试时),但在字符串上使用时崩溃:
SyntaxError: Unexpected token D in JSON at position 0
“D”是字符串(“Doe”)的开头,它在尝试解析第一个字母后崩溃。
问题是,我确实想将传入的请求解析为 JSON,但我确实想过滤,例如数字作为名字发送。
实现/过滤传入表单数据的最佳方法?
谢谢你。
解决方案
根据您发布的屏幕截图,您没有将 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 数据。
推荐阅读
- javascript - FireBase 重复推送
- c++ - QTimer 超时不会在单元测试中触发
- c# - 用户控件中的 DataGrid 引发异常无法转换类型为“MS.Internal.NamedObject”的对象
- reactjs - 使用 const { icon, ...other } = this.props 时出现语法错误;
- javascript - 将数组值分配给应用程序脚本中的变量时出错
- dialogflow-es - 识别国际区域代码电话号码中的“加号”的 DialoFlow 问题
- python - 十六进制到二进制:binascii.unhexlify 的奇数长度字符串错误
- ios - 在 iPhone x 上滚动时 UITableview 有底部空间
- ios - iOS-(Swift 中的`FirebaseApp.configure()`)在使用 Firebase 数据库之前。
- ruby - 支持字符串格式#% rubocop