我正在尝试使用此代码将json文件导入Firebase
var admin = require("firebase-admin");
var serviceAccount = require("./service_key.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "MY DB URL"
});
const firestore = admin.firestore();
const path = require("path");
const fs = require("fs");
const directoryPath = path.join(__dirname, "files");
fs.readdir(directoryPath, function(err, files) {
if (err) {
return console.log("Unable to scan directory: " + err);
}
files.forEach(function(file) {
var lastDotIndex = file.lastIndexOf(".");
var menu = require("./files/" + file); #<---------
menu.forEach(function(obj) {
firestore
.collection(file.substring(0, lastDotIndex))
.doc(obj.itemID)
.set(obj)
.then(function(docRef) {
console.log("Document written");
})
.catch(function(error) {
console.error("Error adding document: ", error);
});
});
});
});
我认为我已经将问题缩小到这一行: var menu = require(“ ./ files /” + file)
我只是想不出问题所在。我已经成功地在一个文件上运行了该文件,并在另一个文件上进行了尝试,现在这两个文件都不再起作用。我已经清除了Firestore,所以里面没有任何东西,我想我已经消除了json文件的问题。
我在Mac上,因此路径错误吗?我不确定
Node.js脚本在包含子文件夹'files'的文件夹中运行。
答案 0 :(得分:1)
这是一个众所周知的问题,require
无法使用变量。
您是对的,此行导致了此问题。不幸的是,没有简单的魔术解决方案(至少我还没有找到)。
我在那里进行了一些研究,但是还没有找到任何文档清楚地说“这是行不通的”。这与执行顺序有关,我相信require语句会在其余代码或类似代码之前执行。
我强烈建议研究这个主题。如果您用谷歌搜索:“ js require with variable”,“在js中动态需求”或类似的内容。您会发现各种问题,有关in的文章,并且我相信您还会找到许多尝试解决它的方法...