如何在前端正确解析并显示登录接口的响应消息
发布时间 - 2026-01-21 00:00:00 点击率:次本文讲解如何修复客户端 javascript 中对登录 api 响应的错误解析逻辑,确保能准确获取服务端返回的状态码与提示信息,并通过 alert 或其他方式友好地呈现给用户。
在你提供的客户端代码中,存在一个关键性错误:response.text() 返回的是一个 Promise,而你直接对其调用了 JSON.parse(),这会导致运行时错误(如 Unexpected token o in JSON at position 1 或 Cannot parse undefined),因为 response.text() 尚未完成解析,其返回值并非字符串,而是 Promise 对象。
✅ 正确做法是先 await response.text() 得到原始响应文本,再用 JSON.parse() 解析为 JavaScript 对象:
// ✅ 正确:先 await text(),再 parse const responseText = await response.text(); const incomingResponse = JSON.parse(responseText); const status = incomingResponse.status;
但更推荐、更简洁且健壮的方式是直接使用 response.json() —— 它内部已封装了 text() + JSON.parse() 的完整流程,并自动处理 Content-Type 验证(前提是服务端设置了 Content-Type: application/json,你的代码中已满足):
// ✅ 最佳实践:直接 await response.json()
const incomingResponse = await response.json();
const { status, message } = incomingResponse;
console.log('Status:', status, 'Message:', message);
if (status === 404) {
alert('Twój adres e-mail nie został jeszcze zarejestrowany. Proszę się zarejestrować.');
} else if (status === 401) {
alert('Nieprawidłowy adres e-mail lub hasło.');
} else if (status === 200 && status === 'success') {
alert('Zalogowano pomyślnie!');
// 可选:跳转到主页或保存 token
window.location.href = '/dashboard';
} else {
alert(`Wystąpił błąd: ${message || 'Spróbuj ponownie później.'}`);
}⚠️ 同时,请注意服务端代码中的两个高危问题(虽非本题核心,但强烈建议修正):
-
SQL 注入漏洞:你当前使用字符串拼接构造 SQL 查询:
`SELECT * FROM Clients WHERE email = '${email}'`这极易被恶意输入利用(如 ' OR '1'='1)。✅ 应改用参数化查询:
connection.query('SELECT * FROM Clients WHERE email = ?', [email], (error, results) => { ... }); -
明文存储密码:代码中直接比对 results[0].password !== password,说明密码未加密存储。✅ 必须使用 bcrypt
等库进行哈希比对:
const isValid = await bcrypt.compare(password, results[0].password);
? 额外建议:提升用户体验,可用
替代 alert() 实现非阻塞式提示:const msgEl = document.getElementById('message');
msgEl.textContent = message; // 或 innerHTML = `⚠️ ${message}`
msgEl.style.display = 'block';综上,修复客户端响应解析仅需一行关键修改(response.json()),但结合安全加固与交互优化,才能构建真正可靠、专业的登录流程。
# javascript
# word
# java
# html
# js
# 前端
# json
# go
# app
# ai
# win
# 状态码
# red
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Android自定义listview布局实现上拉加载下拉刷新功能
Laravel用户密码怎么加密_Laravel Hash门面使用教程
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Laravel如何实现API速率限制?(Rate Limiting教程)
如何安全更换建站之星模板并保留数据?
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Laravel如何生成URL和重定向?(路由助手函数)
如何获取PHP WAP自助建站系统源码?
Java类加载基本过程详细介绍
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
使用豆包 AI 辅助进行简单网页 HTML 结构设计
Swift开发中switch语句值绑定模式
JavaScript中的标签模板是什么_它如何扩展字符串功能
如何在企业微信快速生成手机电脑官网?
深圳网站制作的公司有哪些,dido官方网站?
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
利用 Google AI 进行 YouTube 视频 SEO 描述优化
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
如何将凡科建站内容保存为本地文件?
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
JS碰撞运动实现方法详解
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
jquery插件bootstrapValidator表单验证详解
UC浏览器如何设置启动页 UC浏览器启动页设置方法
如何打造高效商业网站?建站目的决定转化率
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
如何确保FTP站点访问权限与数据传输安全?
如何在建站之星网店版论坛获取技术支持?
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
JS经典正则表达式笔试题汇总
如何在IIS7上新建站点并设置安全权限?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Laravel如何创建自定义中间件?(Middleware代码示例)
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
如何快速搭建高效服务器建站系统?
做企业网站制作流程,企业网站制作基本流程有哪些?
Laravel如何使用Eloquent进行子查询
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
高性能网站服务器部署指南:稳定运行与安全配置优化方案
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性


