javascript - 从 server.js 获取对象 app.get 调用到 jS 文件以进行 API 调用
问题描述
我有一个 server.js,其中有我所有的 app.get 调用,其中一个我试图将数组导出到另一个 javascript 文件以用于不同的 API 调用。这是我拥有的端点:
app.get('/getInventory', checkNotAuthenticated, (req,res)=>{
var email = {user: req.user.email}; // used to obtain the email of the user thats logged in currently
var currUser = email.user;
pool
.query(`SELECT itemname FROM inventory WHERE email = $1`, [currUser])
.then((results)=>{
console.log(results.rows);
var myArr = [];
results.rows.forEach((item)=>{
myArr.push(item.itemname);
});
console.log(myArr);
module.exports = {myArr};
res.render('search')
})
.catch((err) =>{
console.log(err)
})})
这就是我要导入 myArr 的地方。当用户想要根据 /getInventory 端点的返回进行搜索时,我想要这个 myArr 在调用 api 的 js 文件中。
const {myArr} = require('../server.js');
console.log('this is in the pscript file', myArr);
这提供了一个错误说
“pscripts.js:3 未捕获的 ReferenceError:未定义要求”
我查看了几个堆栈溢出帖子,这就是我目前使用的解决方案的方式。不知道如何管理这个障碍。我正在使用 express 和 nodeJS。如果您需要任何其他信息来帮助解决这个问题。我会提供我能提供的。谢谢你。
解决方案
'require' 在您导出任何内容之前运行。您需要将 myArr 保留在本地范围内并在运行时获取它。
let myArr = []
module.exports = ()=> myArr;
app.get('/getInventory', checkNotAuthenticated, (req,res)=>{
var email = {user: req.user.email}; // used to obtain the email of the user thats logged in currently
var currUser = email.user;
pool
.query(`SELECT itemname FROM inventory WHERE email = $1`, [currUser])
.then((results)=>{
console.log(results.rows);
myArr = [];
results.rows.forEach((item)=>{
myArr.push(item.itemname);
});
console.log(myArr);
res.render('search')
})
.catch((err) =>{
console.log(err)
})})
然后,每次您需要数组时,只需调用它的函数:
const exportedArray = require('../server.js');
const myArr = exportedArray();
console.log('this is in the pscript file', myArr);
请注意,它将打印一个空数组,因为 'require' 在运行时运行,因此 myArr 为空。您应该在另一个函数中使用它:
const exportedArray = require('../server.js');
module.exports.foo = function(){
const myArr = exportedArray();
console.log('this is in the pscript file', myArr);
}
现在,如果在 server.js 运行后调用 'foo' 方法,myArr 将正确打印。
- 笔记 **
顺便说一句,这不是一个好习惯。如果您不止一次需要某些数据,则应将其分离到一个新模块中并在需要的任何地方调用,
推荐阅读
- java - MVVM中RecyclerView中的分页重复值
- python - tkinter 主窗口 matplotlib 图形嵌入在画布上,影响顶层窗口图形嵌入在不同的画布上
- macos - 即使 vscode 关闭,dart 任务也会继续运行
- php - 如何在 HTML/PHP 中在更改密码表单上显示用户的个人资料图片(应显示登录用户的图片)
- python-3.x - FastAPI + MongoDB: bson.errors.InvalidId: '2021-01-01_2021-12-31' 不是有效的 ObjectId,它必须是 12 字节输入或 24 字符十六进制字符串
- typo3 - 在 TYPO3 v10 中的 Extbase 操作中返回有什么影响?
- css - 如何更改隐式行上的网格列大小?
- java - RecyclerView中的ImageButton
- node.js - 更新参考值猫鼬
- c# - Jquery/Ajax 自动完成文本框在 ASP.net 中不起作用