您好,我目前正在尝试弄清楚如何在node.js中正确定义全局变量。我知道这样做不是一个好习惯,但是在这个特殊的场景中,这是不使用数据库连接的唯一方法。
我正在从github API获取数据以显示一些信息,我正在尝试将它们存储在全局变量中。它应该允许我例如将特定对象从第一个全局列表传递到仅显示所选项目的新全局列表。
我有一个名为utils.js的文件,其中有两个应该为全局的空数组:
let repoItems = [];
let bookmarkedItems = [];
exports.repoItems = repoItems;
exports.bookmarkedItems = bookmarkedItems;
然后,我有另一个文件,该文件可以提取并应将项目分配给第一个全局变量,但看起来好像没有。因为在我试图选择一项并将其推入第二个空数组的那一刻是不可能的,所以我正在获取空数组。我不确定是否由于其他文件中全局变量的错误实现或其他原因而犯了错误:/
下面,我包括代码的获取部分,以及与之混淆的粗体部分:
let utils = require('../utils');
let {
repoItems,
} = utils;
router.get('/', async (req, res) => {
try {
const result = await fetchGithubAPI(`searching word`);
const urls = result.map(url => url);
console.log(urls);
res.render('repositories.ejs', {
'data': urls
});
} catch (e) {
console.log(e);
}
});
async function fetchGithubAPI(search) {
const response = await fetch(`https://api.github.com/?q=${search}`, {
method: 'GET',
headers: {
'Accept': 'application/vnd.github.v3+json',
'Content-Type': 'application/json',
},
});
const data = await response.json();
**repoItems = data.items.map(item => item);**
return repoItems;
}
尝试:
let repoItems = require('./utils').repoItems
而不是
let {
repoItems,
} = utils;
如果删除
let {
repoItems,
} = utils;
您可以尝试使用utils.repoItems = data.items.map(item => item)
我尝试了一个示例设置
-utils.js
module.exports.someValue = 3;module.exports.setSomeValue =(值)=> {someValue =值}
-index.js
const utils = require('./utils');
console.log(utils.someValue);// 3
utils.someValue = 5
console.log(utils.someValue);// 5
了解了Js中的getter和setter方法后进行更新您可以参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set这是更改JS中任何私有属性的值的另一种方法]