NodeJS 除非应用了preventDefault,否则JSReact API响应不会保存到本地存储

4nkexdtk  于 8个月前  发布在  Node.js
关注(0)|答案(1)|浏览(57)

有一个应用程序需要登录和注册。现在所有的API请求都正确返回正确的数据。当尝试将返回的数据保存到localstorage时出现问题。当尝试登录时,返回数据(即:令牌)将不保存到本地存储,unless e.preventDefault()在调用signin函数之前应用。现在数据从后端拉取,但在客户端不会保存到localstorage。提交登录表单后,localstorage刷新没有保存任何东西。现在如果应用了prevent default,它将正确地保留。有没有办法在没有e.preventDefault()的情况下保存本地存储令牌?
现在我知道它确实与API .then((d)=>{...})部分有关。如果我将其更改为.then(localstorage.setItem("token", 1)。它在没有e.preventDefault()的情况下完美保存。
Login.js

import { signup, signin } from "../pages/api/index.js";

  const [form, setForm] = useState({
    email: "",
    password: "",
  });

  const handleSumbit = (e) => {
    //e.preventDefault(); //if this is applied localstorage token will stay
   signin(form)
      .then((d) => {
        localStorage.setItem("token", JSON.stringify(d.data));
      })
      .catch((e) => {
        console.log("error");
      });
  };

字符串
api.js

export const signin = async (data) => {
  return await axios.post("http://localhost:5010/signin/", data);
};


后端sign.js

export const signin = async (req, res) => {
  const data = req.body;
  const email = data.email.trim().toLowerCase();
  const username = data.username;

  const user = await User.findOne({
    $or: [{ email }, { username }],
  });

  if (!user) {
    return res.status(404).json({ error: "Error / Cannot find User" });
  }

  const valid = await bcrypt.compare(data.password, user.password);
  if (!valid) {
    return res.status(404).json({ error: "Wrong/Error with Credentials" });
  } else {
    //create and return json web token
    //res.send(jwt.sign({ id: user._id }, process.env.JWT_SECRET));
    return jwt.sign({ id: user._id }, process.env.JWT_SECRET);
  }
};

qij5mzcb

qij5mzcb1#

  • 若要避免使用“e.preventDefault()”,您可以考虑使用onSubmit属性而不是onClick来处理表单提交。通过这样做,您可以在不显式调用e.preventDefault()的情况下阻止默认表单提交。这种方法可能有助于避免使用e.preventDefault()*
const handleSumbit = async () => {
  try {
    const response = await signin(form);
    localStorage.setItem("token", JSON.stringify(response.data));
  } catch (error) {
    console.log("error", error);
  }
};

<form onSubmit={handleSumbit}>
    <button type="submit">Submit</button>
  </form>

字符串

相关问题