Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose将JSON分配给变量的问题_Javascript_Node.js_Mongoose - Fatal编程技术网

Javascript Mongoose将JSON分配给变量的问题

Javascript Mongoose将JSON分配给变量的问题,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,提前感谢所有阅读本文的人。我真的很感谢你的帮助 这是我的第一个个人应用。我已经在mongodb.com上的Atlas中设置了一个DB,我可以在没有问题的情况下写入它。但当我的应用程序尝试从数据库中提取时,我可以将其打印到控制台。但我可以将数据分配给任何变量,以便在我的应用程序中的任何其他地方使用 这是我的代码,可以打印到控制台。但不确定缺少什么设置或包,以便将其存储为局部变量。我使用回调函数返回api调用,控制台打印输出正常。只是不知道下一步该怎么办 函数获取项{ 让allTerms=[] t

提前感谢所有阅读本文的人。我真的很感谢你的帮助

这是我的第一个个人应用。我已经在mongodb.com上的Atlas中设置了一个DB,我可以在没有问题的情况下写入它。但当我的应用程序尝试从数据库中提取时,我可以将其打印到控制台。但我可以将数据分配给任何变量,以便在我的应用程序中的任何其他地方使用

这是我的代码,可以打印到控制台。但不确定缺少什么设置或包,以便将其存储为局部变量。我使用回调函数返回api调用,控制台打印输出正常。只是不知道下一步该怎么办

函数获取项{ 让allTerms=[] termAdd.find{},_id',err,term=>{ term.mapterm=>{ 所有术语 //如果我理解正确,这应该将我的输出存储到allTerms。 }; //这可以用JSON打印到控制台。 console.logallTerms,“getTerms” 返回所有条款; }; }; 如果res.statusCode==200{ //回调函数从函数返回控制台 获取项 //当我执行let foo=getTerms时,它将返回undefined //所以我真的不明白如何分配从 //将函数转换为变量。 //如何将此控制台输出分配给用于输出的变量 控制台。日志“200状态代码” }; //随机数发生器 设ranNum=Math.floorMath.random*10+1; log'random number=',ranNum; res.render'fs'{ 抽认卡:“测试卡”, 项目:ranNum };
}; 在此之前,请避免将.env文件推送到Github或公开共享其中的任何内容

您将获取术语的功能分离为自己的功能,这很好:

//获取mongodb中所有项的函数 函数allItemsall{ 让allTerms=[] termAdd.find{},'term',err,term=>{ term.mapterm=>{ 所有术语 }; //这可以打印到控制台。 console.logallTerms,“函数allTerms” //问题是如何将这个JSON保存到VAR或传递到另一个函数 }; }; 首先,我将它重命名为getAllTerms,因为它就是这样做的。似乎所有参数都不是必需的

**

不管怎样,通常只需返回allTerms变量,如下所示:

//获取mongodb中所有项的函数 函数getAllTerms{ 让allTerms=[] termAdd.find{},'term',err,term=>{ term.mapterm=>{ 所有术语 }; //这可以打印到控制台。 console.logallTerms,“函数allTerms” //问题是如何将这个JSON保存到VAR或传递到另一个函数 }; 返回所有条款 } 但是,这不起作用,因为您正在调用数据库,数据库可能需要一些时间才能获取术语;在这种情况下,allTerms可能返回一个空数组[]

您需要做的是等待数据库返回术语,将它们推入allTerms数组,最后返回它

//获取mongodb中所有项的函数 异步函数getAllTerms{ 让allTerms=[] const fetchedTerms=await termAdd.find{},'term' fetchedTerms.forEachfetchedTerm=>allTerms.pushfetchedTerm 返回所有条款 } 如果您不知道async和Wait是什么,不用担心


如果您还有任何问题,请告诉我。

使用Async/wait可以优化上面的代码,如下所示:

`

`


有关Async/Await的更多信息,请参阅

我正试图了解您想要存储的内容;是字符串“200状态码”吗?很抱歉,我正在尝试存储getTerms函数的返回值。但是当我分配let foo=getTerms时,它返回并在控制台中统一。那么数据在哪里呢?我认为,在做任何事情之前,你应该把你的职能分开;getTerms中发生的事情太多了。如果我没弄错的话,你是不是又在里面调用getTerms了?你能分享剩下的代码吗?哦,不,不!删除那个。永远不要分享那个链接;它包含数据库的URI和密码。事实上,最好不要共享.env中的任何内容,也不要将.env文件推送到GithubHey伙计,非常感谢您的帮助。但我觉得我也犯了同样的错误。在控制台中显示项目的位置。但它们并没有被传递到屏幕上。在我的网页上,我得到了[object Promise],我是否必须在函数回调中进行某种类型的查看,以使这些信息可用?@AugustoRodriguez尝试使用async,并在
你也可以打电话给getAllTerms谢谢你的帮助。明天我会继续做这件事。看来我得先考虑一下异步,然后再等待。@AugustoRodriguez没问题,如果您还有其他问题,请告诉我。谢谢您的帮助。现在,我可以使用这些变量作为带有句柄栏的页面内容。
async function getTerms() {
    //using async/await 
    try{
    const terms = await termAdd.find({}, '_id')
    const allTerms = terms.map((term)=>term)
    // return allTerms here
    return allTerms
    }catch(err){
      throw err
    }
 }