node-localstorage中new LocalStorage('./scratch')作用及跨文件读取疑问
node-localstorage实例化代码作用说明
首先直接解答你核心疑问,var localStorage = new ls.LocalStorage('./scratch'); 这行代码的具体作用如下:
- 它是node-localstorage库的初始化操作:Node.js原生不具备浏览器端的localStorage API,这个库通过在磁盘读写文件的方式模拟实现了整套localStorage接口,必须先完成实例化才能调用
setItem、getItem等存储方法 - 构造参数
./scratch是指定存储数据的本地磁盘目录:你所有写入的键值对都会以独立文件的形式持久化保存在这个目录下,重启服务后数据不会丢失 - 只要实例化时传入的目录路径完全一致,不同JS文件中创建的实例读写的是同一批存储数据,内容完全互通
常见使用问题解答
读取数据时是否需要重复写这行初始化代码?
需要。只要当前操作的文件中没有已经实例化完成、绑定了./scratch路径的存储实例,就必须先初始化才能调用读取方法。
你也可以把实例化逻辑抽为公共模块复用,避免重复编写代码:
- 新建公共存储模块
localStorage.js
const { LocalStorage } = require('node-localstorage'); // 全局只初始化一次,所有文件共用同一个实例 module.exports = new LocalStorage('./scratch');
- 其他文件直接引入使用即可
// 写入文件或者读取文件都可以用 const localStorage = require('./localStorage.js'); // 直接读取数据 const savedUser = localStorage.getItem('user');
现有代码优化建议
你当前的代码是每次接口请求触发时都新建一个存储实例,属于不必要的重复操作,可以把实例化逻辑提到路由模块顶部,全局只初始化一次即可:
const ls = require('node-localstorage'); const express = require("express"); const router = express.Router(); // 提前完成初始化,不用每次请求都新建实例 const localStorage = new ls.LocalStorage('./scratch'); router.route("/").post((req, res, next) => { if(req.body.name != undefined){ localStorage.setItem("user", req.body.name); res.redirect('/') } else{ console.log("undefined") } }); module.exports = router;
内容的提问来源于stack exchange,提问作者unp1ng46l3
相关产品推荐
相关产品推荐

