您好我正在使用express.js创建一个简单的博客,使用data.json文件创建/更新/删除基于 id 的帖子。 每次我这样做,我都会使用 fs.writeFile 来创建和更新markdown帖子使用json数组中的slug数据。 因此,当我创建一个名为First Post的帖子时,我会在 / path 文件夹中获得 first-post.md 文件。 问题:每次我更新文件并使用 fs.writeFile 我都在创建新文件路径而不删除旧文件路径?
示例:
更新json数组上的名称数据:
第一篇文章 至 首次发布更新 我收到了降价文件 first-post-update.md 。但旧的 first-post.md 文件仍然存在。
是否可以删除目录路径上的每个markdown文件,该文件没有与data.json文件中的每个slug数据的对应链接?
这样的事情:
function deleteFiles(files, callback){
files.forEach(function(filepath){
//Filter every item.id on data.json and get the slug params.
fs.unlink(filepath, function(err) {
//If any markdown file don´t have a corresponding link to each slug data delete them.
});
}
data.json示例:
{
"posts": [
{
"name": "First Post",
"desc": "Some description",
"slug": "first-post",
"id": "07cbc3854-7fa7-4451-883c-a9c8c87143ef"
}
]
}
创建和更新帖子的一些示例代码:
exports.save = function (req, res) {
var slugTitle = slug(req.body.name).toLowerCase().split('.').join("");
var description = req.body.desc;
db.add({name:req.body.name, desc:req.body.desc, slug: slugTitle});
fs.writeFile("path/"+slugTitle+".md", description, function(err) {
if(err) {
console.log(err);
} else {
console.log("The new post was created on path/"+slugTitle+".md");
}
});
res.redirect('/post');
};
exports.update = function (req, res) {
var slugTitle = slug(req.body.name).toLowerCase().split('.').join("");
var description = req.body.desc;
db.update({id: req.body.id, name: req.body.name, desc: req.body.desc,slug: slugTitle});
fs.writeFile("path/"+slugTitle+".md", description, function(err) {
if(err) {
console.log(err);
} else {
console.log("The new post was updated on path/"+slugTitle+".md");
}
});
res.redirect('/post');
};
答案 0 :(得分:0)
您可能希望使用像MongoDB或SQL这样的数据库系统来实现此目的。它通常更容易使用数据库而不是自己编写所有这些东西。可以这么说,不需要重新发明轮子。您似乎已经使用一个来存储元数据,为什么不对整篇文章这样做?
话虽如此,是的,您的初始代码片段应该可以正常工作。
答案 1 :(得分:0)
您是否考虑过删除旧的降价文件作为更新过程的一部分?您可以在更新之前从数据库中的文档中检索slugTitle,然后删除该文件。我在下面概述了一个示例,您可以将其作为另一个函数或将其直接集成到您的更新函数中。您需要考虑一下在代码中最有效的方法,而不需要太多的分层回调。
请注意,我正在使用Mongoose的findById,但您可以将该概念应用于您正在使用的任何系统。
db.findById(req.body.id, 'slug', function(err, slugTitle) {
if(err) {
console.log(err);
}
fs.unlink("path/"+slugTitle+".md", function(err) {
if(err) {
console.log(err);
} else {
console.log("Deleted the old markdown file: " + slugTitle +".md");
}
});
});