Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 从不同的路由调用异步函数会得到不同的结果_Javascript_Node.js_Async Await - Fatal编程技术网

Javascript 从不同的路由调用异步函数会得到不同的结果

Javascript 从不同的路由调用异步函数会得到不同的结果,javascript,node.js,async-await,Javascript,Node.js,Async Await,我有一个名为“teteraQueryDb()”的异步函数,它以如下路径从数据库中获取数据:root/afolder/bfolder/file.js该函数的导出方式为:module.exports.teteraQueryDb=teteraQueryDb 当我尝试从同一路径中的文件调用函数时,我这样做并成功: const teteraProvDb = require('./readingProvTetera'); (async(teteraProvDb) =>{ var newTe

我有一个名为“teteraQueryDb()”的异步函数,它以如下路径从数据库中获取数据:root/afolder/bfolder/file.js该函数的导出方式为:module.exports.teteraQueryDb=teteraQueryDb

当我尝试从同一路径中的文件调用函数时,我这样做并成功:

const teteraProvDb = require('./readingProvTetera');

(async(teteraProvDb) =>{

    var newTeteraProvDb = await teteraProvDb.teteraQueryDb().then((te) => {return te})
    console.log(newTeteraProvDb)
    
})(teteraProvDb);
但是,从根目录执行此操作时,我无法获取数据,并且得到“未定义”:

这是readingProvTetera.js的配置:

const sqlite3 = require('sqlite3').verbose();
const dbRoute = '../../myDb.db'

function teteraQueryDb(){

    let db = new sqlite3.Database(dbRoute, err =>{
        console.log(err)
    })
    return new Promise (resolve =>{
        db.all("SELECT DISTINCT * FROM tetera", (err, rows) =>{
            if(err){
                console.log("Something went wrong with the query");
            }
            resolve(rows) 
        })
    })
    db.close()
}

module.exports.teteraQueryDb = teteraQueryDb

为什么??我是否缺少作用域的某些内容?

/
不是根路径,而是当前文件夹路径。因此,当您编写path
/readingProvTetera
时,意味着从当前文件夹加载数据库。路径
/afolder/bfolder/readingProvTetera
意味着从当前文件夹的afolder的bfolder加载db


根路径可以通过
console.log(process.env.PWD)
检查。因此路径可以是
${process.env.PWD}/afolder/bfolder/file.js

,顺便说一下,
。然后((te)=>{return te})
在这里是完全多余的,所以只需删除它。但目前还不清楚这两个模块之间的行为为何不同,因此如果您想得到答案,可能需要回答您的问题并提供
teteraQueryDb
的实现。当您想转到父文件夹时,
。/
将路径转到父文件夹。嘿@jacokim,非常感谢您的努力,但在这种情况下,Db不在“/a文件夹/b文件夹”中,而是在“/”文件夹中。并尝试要求${process.env.PWD}/afolder/bfolder/file.js。也不管用。我在哪里可以找到更多关于这方面的信息?在你指出了这一点之后,我很确定问题就在那里:-)所以我发现了到底发生了什么。主要问题在于我的代码访问数据库的方式。当我将它切换到绝对路径时,一切都开始工作:-)@error404你好。很高兴你的问题解决了。很抱歉,如果我知道你的文件夹是什么样子的话,我会帮上忙。希望你有快乐的编码。如果答案有帮助,请选择我的答案!
const sqlite3 = require('sqlite3').verbose();
const dbRoute = '../../myDb.db'

function teteraQueryDb(){

    let db = new sqlite3.Database(dbRoute, err =>{
        console.log(err)
    })
    return new Promise (resolve =>{
        db.all("SELECT DISTINCT * FROM tetera", (err, rows) =>{
            if(err){
                console.log("Something went wrong with the query");
            }
            resolve(rows) 
        })
    })
    db.close()
}

module.exports.teteraQueryDb = teteraQueryDb