使用JavaScript Fetch API与Flask通信无法获取文本响应求助
问题解决:Fetch API无法获取Flask返回的文本响应
核心错误原因
你的JavaScript代码中,第一个.then回调写法错误:
.then(res => Response.body)
这里你访问的是全局Response构造函数的body属性,而非当前响应对象res的内容读取方法。Response.body本身未定义,导致后续输出undefined。
修正后的JavaScript代码
要获取纯文本响应,需调用响应对象的text()方法(该方法返回Promise,解析后得到文本内容):
fetch("/validatelogin", { method: "POST", headers: {'Content-Type': 'application/json'}, body: JSON.stringify({"username": credentials[0],"password": credentials[1]}, null, 4) }) .then(res => res.text()) // 调用res.text()读取文本响应 .then(body => console.log(body)) // 此处可正常拿到"yes"或"no" .catch(err => console.error("请求出错:", err)) // 建议添加错误捕获逻辑
Flask代码简化(可选)
Flask支持直接返回字符串与状态码,无需手动创建make_response,可简化代码:
@app.route('/validatelogin', methods=['POST']) def login(): users = loads(post( 'http://localhost:8000/sql', headers=headers, auth=HTTPBasicAuth('nonono','rnoonononoo'), data=f"SELECT * FROM user WHERE username = {request.json['username']} AND password = {request.json['password']}" ).text)[0]["result"] if users != []: return "yes", 200 return "no", 200
重要安全提醒
你的SQL查询存在严重的SQL注入漏洞!直接用字符串拼接用户输入的方式构造SQL语句,攻击者可通过恶意输入篡改查询逻辑,窃取或破坏数据库数据。必须改用参数化查询,示例思路:
# 替换原字符串拼接方式,使用参数占位符 data = { "query": "SELECT * FROM user WHERE username = %s AND password = %s", "params": [request.json['username'], request.json['password']] } # 具体格式需根据你的SQL接口要求调整
内容的提问来源于stack exchange,提问作者Ender Bender
相关产品推荐
相关产品推荐

