我有一个以下简单的代码,可以使用 Express 向服务器发送 POST 请求:
$http.post('/blah', {
boolean: true,
stringBoolean: 'true',
number: 213,
stringNubmer: '44444444',
string: 'adssd',
arrayNumber: [1, 2, 3, 4],
arrayBoolean: [true, false, "true", "false"],
});
服务器端的这些行:
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
app.post('/blah', (req, res)=>{
console.log(req.body)
})
客户端发送请求后控制台中的输出(在 Chrome 和 Firefox 上测试)将包含所有值作为字符串:
{ boolean: 'true',
stringBoolean: 'true',
number: '213',
stringNubmer: '44444444',
string: 'adssd',
arrayNumber: [ '1', '2', '3', '4' ],
arrayBoolean: [ 'true', 'false', 'true', 'false' ] }
然后我使用 Postman 将相同的数据结构发送到服务器:
{
"boolean": true,
"stringBoolean": "true",
"number": 213,
"stringNubmer": "44444444",
"string": "adssd",
"arrayNumber": [1, 2, 3, 4],
"arrayBoolean": [true, false, "true", "false"]
}
但是这次我在控制台中有数字和布尔值:
{ boolean: true,
stringBoolean: 'true',
number: 213,
stringNubmer: '44444444',
string: 'adssd',
arrayNumber: [ 1, 2, 3, 4 ],
arrayBoolean: [ true, false, 'true', 'false' ] }
看起来像是在幕后做一些约定。我怎样才能避免这种情况并获得发送到服务器的正确值类型?
更新: 在 Chrome 控制台中,我可以看到原始格式的请求正文,如下所示:
这意味着每个值始终是字符串,我必须在服务器端手动将其转换为适当的类型。这样的追问对吗?这里有哪些好的做法?
它在内部使用
JSON.stringify()
。使用JSON.parse()