Javascript 是否可以跨整个Node Express服务器定义全局变量?
我正在创建一个依赖于从API获取的数据的Node/Express应用程序。问题是,我的应用程序必须经常从API获取数据,并且每次都要执行一些密集计算,因此我希望缓存来自API和密集计算的结果 我已经写了一些非常基本的缓存功能(例如,将值写入文本文件),但我很好奇是否有办法将值保存在某种对象的内存中,以便在整个应用程序中轻松访问(例如,跨多个文件)而不是使用util函数每次从文本文件中读取值 例如,也许我有一个范例如下:Javascript 是否可以跨整个Node Express服务器定义全局变量?,javascript,node.js,express,module,Javascript,Node.js,Express,Module,我正在创建一个依赖于从API获取的数据的Node/Express应用程序。问题是,我的应用程序必须经常从API获取数据,并且每次都要执行一些密集计算,因此我希望缓存来自API和密集计算的结果 我已经写了一些非常基本的缓存功能(例如,将值写入文本文件),但我很好奇是否有办法将值保存在某种对象的内存中,以便在整个应用程序中轻松访问(例如,跨多个文件)而不是使用util函数每次从文本文件中读取值 例如,也许我有一个范例如下: import { map } from './utils/mapManage
import { map } from './utils/mapManager.js'
const getGreenValue = (req, res) => {
res.send(map.green);
}
当服务器首次初始化时,我获取数据,并创建某种缓存值:
const data = await api.get('colors');
const map = {
red: data.red,
blue: data.blue,
green: data.green,
}
在我的一个控制器中,我希望访问map
,并能够使用这些值。所以也许我可以这样做:
import { map } from './utils/mapManager.js'
const getGreenValue = (req, res) => {
res.send(map.green);
}
设计一个试图实现这种行为的系统的最佳方法是什么
提前感谢,并乐意回答任何澄清问题。请参阅本文档-> 在这种情况下,可以使用
global
对象
console.log(globalString); // Output: "This can be accessed anywhere!"
globalString = "Check me out now";
console.log(globalString); // Output: "Check me out now"
globalString = undefined;
console.log(globalString); // Output: undefined```
您可以使用expressjs app.locals属性 要写入数据:
app.locals.map = map;
要读取数据:
let map = app.locals.map;
文件:
我建议你试试
express
specificapp.locals
或res.locals
假设你有一个像这样初始化的应用程序
const app = express();
const data = await api.get('colors');
const map = {
red: data.red,
blue: data.blue,
green: data.green,
}
//Assign it to locals
app.locals.map = map;
现在,map
在应用程序的整个生命周期内都是可用的,您只需调用变量map
,就可以在视图中访问它
res.locals
执行相同的操作,但它仅在请求的生命周期之前可用。例如,您希望根据请求发送特定颜色。你可以这样做
app.use(function(req, res, next){
if(req.params.id==='admin')
res.locals.color = req.app.locals.map.red;
else
res.locals.color = req.app.locals.map.blue;
next();
});
使用上述中间件,您将能够拥有一个变量color
,该变量可用于所有后续中间件和最终视图。您可以使用color
在视图中访问相同的内容。这将持续到该请求的生存期