我正在尝试为mp3文件路径抓取我的音乐文件夹,并将其保存到我的数据库中。以下是代码的相关部分:
const ForerunnerDB = require("forerunnerdb");
const fdb = new ForerunnerDB();
const db = fdb.db("DB");
db.persist.dataDir('/data');
let songCollection = db.collection("songs");
function generateLibrary(path) {
if (!fs.existsSync(path)) {
console.log("Directory '", path ,"' does not exist.");
return;
}
fs.readdir(path, function(err, results) {
for (let item of results) {
let curFilePath = pathTools.join(path, item);
fs.lstat(curFilePath, function(err, stats) {
if (stats.isDirectory()) {
saveDB(generateLibrary(curFilePath)); // Save between directories
} else if (pathTools.extname(curFilePath) === ".mp3") {
console.log("Adding: ", curFilePath);
songCollection.insert({path: curFilePath});
}
});
}
})
}
function saveDB(callback) {
console.log("Saving");
songCollection.save(function (err) {
console.log("Ping")
if (!err) {
console.log("Saved song collection.");
if (callback) { callback(); }
} else {
console.log("Saving failed, this shouldn't happen.");
if (callback) { callback(); }
}
});
}
generateLibrary("D:/Music");
正如您所看到的,我在递归搜索文件夹之前使用回调进行保存。这似乎是一个很好的增量。但是,没有什么可以节省!我点击Saving
中的saveDB()
日志点,但它从未到达Ping
。我做错了吗?
答案 0 :(得分:0)
对于有兴趣看到对话的任何人,GitHub上的ForerunnerDB问题跟踪器都回答了这个问题。在这里复制和粘贴(冗长的)会话可能效率不高。