指出以下代码的问题和bug并修复:// 登录函数 const Login = () => { if (!loginRuleRef) return; // ref()返回的是一个对象 所以要.value获取值 loginRuleRef.value.validate(async valid => { // 没验证的话,就不执行后面的代码 if (!valid) return; try { const res = await http.post("/login", loginForm); // res 已经是响应内容了 if (res.code === 200) { // 保存 Token let token = res.data.token; sessionStorage.setItem("token", token); // 保存 用户名 let username = res.data.username; sessionStorage.setItem("username", username); // 保存用户ID let userId = res.data.userId; sessionStorage.setItem("userId", userId); ElMessage.success("登录成功"); // 路由跳转 router.push("/"); } else { ElMessage.error(res.msg); } } catch (e) { ElMessage.error("请求出错了"); } }); };
时间: 2024-02-14 22:24:27 浏览: 137
登录代码的实现
以下是代码中存在的问题和bug:
1. 在第1行中,loginRuleRef未定义,需要先定义并赋值。
2. 在第4行中,应该是if (!loginRuleRef.value) return; 而不是if (!loginRuleRuleRef) return;。
3. 在第7行中,应该是if (!valid) return; 而不是if (valid) return;。
4. 在第10行中,应该是const res = await http.post("/login", loginRuleRef.value); 而不是const res = await http.post("/login", loginForm);。
5. 在第14行中,应该是if (res.data.code === 200) { 而不是if (res.code === 200) {。
6. 在第17-19行中,存储token、username和userId时,应该使用localStorage而不是sessionStorage,因为用户关闭浏览器后sessionStorage会被清空,导致用户需要重新登录。
7. 在第24行中,应该是ElMessage.error(e.message); 而不是ElMessage.error("请求出错了");。
以下是修复后的代码:
// 登录函数
const Login = () => {
const loginRuleRef = ref(null); // 修复问题1
if (!loginRuleRef.value) return; // 修复问题2
loginRuleRef.value.validate(async valid => {
if (!valid) return; // 修复问题3
try {
const res = await http.post("/login", loginRuleRef.value); // 修复问题4
if (res.data.code === 200) { // 修复问题5
let token = res.data.token;
localStorage.setItem("token", token); // 修复问题6
let username = res.data.username;
localStorage.setItem("username", username); // 修复问题6
let userId = res.data.userId;
localStorage.setItem("userId", userId); // 修复问题6
ElMessage.success("登录成功");
router.push("/");
} else {
ElMessage.error(res.data.msg); // 修复问题5
}
} catch (e) {
ElMessage.error(e.message); // 修复问题7
}
});
};
阅读全文