为什么我的表单 post 了一个数字,后台接收到之后变成了 string?

2020-05-21 06:50:51 +08:00
 Waihinchan

html 是这么个写法:

<form action="gamepage" method="post" >
    Player name: <input type="text" name=player_id value="player1"><br>
    Room name: <input type="text" name=room_id value="room1"><br>
    Player amount: <input type="number" name=player_amount value=4><br>
    <input type="submit" value="提交">
    </form>

第三个 player_amount 那里我应该是设置了数字的

服务器用 nodejs 接收这个 post 请求用的 bodyParser

app.post('/gamepage',function(req,res){ 
    console.log('gamepage request');
    console.log(typeof(req.body.player_amount));});

然后 console.log 了一下结果是这样的: string { player_id: 'player1', room_id: 'room1', player_amount: '4' }

所以问题发生在我的表单提交的时候没有设置对格式还是我用错了中间件呢?初学服务器后台这些,对数据的格式也不是很熟悉,折腾了好久。 小弟先感谢各位老哥了。

2558 次点击
所在节点    问与答
9 条回复
meso5533
2020-05-21 07:32:18 +08:00
你看一下开发者工具里面的网络请求,看一下这个 POST 请求的 body 长什么样,你就知道上传的请参数根本没区分 string 还是 number
wangxiaoaer
2020-05-21 07:37:09 +08:00
HTTP 协议传数据的时候可不管你什么格式的,你需要后台自己解析,当然有些通用的比如文件,json 等类型你采用的 web 框架(servlet node 等)可能会帮你解析。
baiyi
2020-05-21 07:54:56 +08:00
post 的数据在 body 里,通过 HTTP 协议的 Content-Type 指定编码格式,如果你不设置 form 的 enctype 属性,默认是 application/x-www-form-urlencoded 编码。如果你想要精确类型的编码,一种常见的选择是使用 application/json 。
Waihinchan
2020-05-21 07:59:31 +08:00
@meso5533 我之前直接用 xmlhttprequest 看过是正常的 但是我后来用表单来发送请求就变了 但是看这结论应该是我解析过程出现了问题 我再去试试 谢谢啦
Waihinchan
2020-05-21 08:02:16 +08:00
@baiyi 我晓得~现在的情况是我后台的确能解析成我想要的 但是其中一个字段就变成了一个字符 按道理应该是数字来的 我之前试过直接发送一个对象解析是 OK 的 所以还是疑惑是不是我的表单出了问题
zachlhb
2020-05-21 08:03:03 +08:00
表单提交的所有数据都是 string,input 上的 type 为 number 只是用来限制输入框的输入类型,并不代表提交到后台就是 int 类型,你要 int 类型后台接收到要自己转换一下
Waihinchan
2020-05-21 08:03:57 +08:00
@zachlhb 好的!明白了!那我去做个类型转换好了
Waihinchan
2020-05-21 08:06:52 +08:00
emmm 所以现在补充说明情况是 我能解析成 json 但是有一个数字的字段变成了 string 根据 6 楼的老哥说的是表单发送都是 string 所以我得手动转换
或者说有没有别的方法呢…?
crella
2020-05-21 08:19:15 +08:00
浏览器以 json 形式上传,服务器以 json 形式解析。
可以看看 json 的序列化和反序列化是怎么做的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/673840

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX