Javascript 从不同的路由调用异步函数会得到不同的结果
我有一个名为“teteraQueryDb()”的异步函数,它以如下路径从数据库中获取数据:root/afolder/bfolder/file.js该函数的导出方式为:module.exports.teteraQueryDb=teteraQueryDb 当我尝试从同一路径中的文件调用函数时,我这样做并成功: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
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