首页 > 解决方案 > 从 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。如果您需要任何其他信息来帮助解决这个问题。我会提供我能提供的。谢谢你。

标签: javascriptnode.js

解决方案


'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 将正确打印。

  • 笔记 **

顺便说一句,这不是一个好习惯。如果您不止一次需要某些数据,则应将其分离到一个新模块中并在需要的任何地方调用,


推荐阅读