如何在Node.js中使用LocalStorage?求代码修复方案
修复后的LocalStorage工具函数
// 复用window存在性检查逻辑 const isBrowser = () => typeof window !== "undefined"; const getItemFromLocalStorage = (key) => { if (!isBrowser()) { console.log("无法在服务端调用localStorage getItem方法"); return null; } try { const storedValue = window.localStorage.getItem(key); return storedValue ? JSON.parse(storedValue) : null; } catch (error) { console.error(`解析localStorage中key为${key}的值失败:`, error); return null; } }; const setItemToLocalStorage = (key, value) => { if (!isBrowser()) { console.log("无法在服务端调用localStorage setItem方法"); return; } try { const stringifiedValue = JSON.stringify(value); window.localStorage.setItem(key, stringifiedValue); } catch (error) { console.error(`往localStorage中设置key为${key}的值失败:`, error); } }; const removeItemFromLocalStorage = (key) => { if (!isBrowser()) { console.log("无法在服务端调用localStorage removeItem方法"); return; } window.localStorage.removeItem(key); }; const clearLocalStorage = () => { if (!isBrowser()) { console.log("无法在服务端调用localStorage clear方法"); return; } window.localStorage.clear(); };
关键修改说明
- 复用检查逻辑:提取
isBrowser函数,避免重复编写typeof window !== "undefined",提升代码可维护性 - 修复setItem存储问题:原代码直接存储原始value,若value是对象/数组会被转为
[object Object]字符串,现在通过JSON.stringify统一处理所有类型的值 - 优化getItem读取效率:原代码两次调用
localStorage.getItem(key),现在只读取一次并缓存结果,减少不必要的存储IO - 增加错误处理:给
JSON.parse和JSON.stringify添加try-catch,避免因存储内容格式错误或循环引用等问题导致程序崩溃 - 统一提示文案:将服务端提示信息简化并保持一致,提升可读性
内容的提问来源于stack exchange,提问作者Narayan Maity
相关产品推荐
相关产品推荐

