React+Flask应用/register收JSON正常但/userlookup报TypeError错误
问题原因
你报错的核心原因是前端调用JSON.stringify的语法错误:JSON.stringify的第一个参数才是需要序列化为JSON的目标值,后续参数分别为替换函数/数组、缩进空格数,不会自动把多个入参拼接成对象。
你登录代码里写的JSON.stringify(username, password),实际上只会把第一个参数username的值序列化输出。比如你传的username是"zhangsan",最终发往后端的请求体就是纯字符串"zhangsan",不是你预期的JSON对象。
Flask解析后request.json就是字符串类型,你用request.json['username']这种字典索引方式访问字符串,自然会触发TypeError: string indices must be integers报错。
另外你说注册路由可以正常运行,实际上注册代码里的JSON.stringify(username, email, password)写法也是错误的,能正常运行大概率是你实际测试时修改过相关代码、或是传入的username本身就是包含所有字段的对象,属于巧合正常。
修复方案
1. 修复前端登录代码
把logitin方法里的body行修改为包裹对象的形式:
body: JSON.stringify({username, password}),
2. 同步修复前端注册代码(避免后续隐藏问题)
把RegisterUser方法里的body行修改为:
body: JSON.stringify({username, email, password, base_city, about_me}),
3. 后端可选优化
- 登录路由不需要支持GET请求,可把
@app.route("/userlookup", methods=['GET','POST'])改为@app.route("/userlookup", methods=['POST']),避免GET请求访问时触发无json的报错 - 给
userlookup函数的所有分支加明确返回值,Flask要求路由函数必须返回可作为响应的内容,否则会触发额外报错。
内容的提问来源于stack exchange,提问作者filifunk
相关产品推荐
相关产品推荐

