javascript - 在 Node.js 中编辑和删除目录中文件的简单方法?

标签 javascript json node.js express

您好,我正在使用express.js创建一个简单的博客,使用data.json文件来创建/更新/删除,基于id的帖子。 每次执行此操作时,我都会使用 fs.writeFile 创建和更新 Markdown 帖子使用 json 数组中的 slug 数据。 因此,当我创建名为 First Post 的帖子时,我会在 /path 文件夹中获得一个 first-post.md 文件。 问题:每次我更新文件并使用 fs.writeFile 时,我都会创建一个新文件路径而不删除旧文件路径?

示例:

Updating the name data on the json array:

第一篇文章第一次更新帖子 我得到一个 markdown 文件 first-post-update.md。但旧的 first-post.md 文件仍然存在。

是否可以删除 data.json 文件中没有每个 slug 数据的对应链接的目录路径上的每个 Markdown 文件?

类似这样的事情:

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');
};

最佳答案

您是否考虑过在更新过程中删除旧的 Markdown 文件?您可以在更新之前从数据库中的文档中检索 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");
    }
  });
});

关于javascript - 在 Node.js 中编辑和删除目录中文件的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28841791/

相关文章:

javascript - 我正在尝试设置 cookie 及其路径,但无法正确设置路径

javascript - Facebook 'share' 按钮在 Firefox 上无法正常工作?

javascript - 特定数组项的 setState()

json - HTTP 中的 "406-Not Acceptable Response"是什么?

javascript - 需要 ('file.json' ) vs readFile ('/file.json' , 回调) vs readFileSync ('/file.json' , 'utf-8' )

python - 将列表表示为带有双引号的字符串,而不是 JSON 的单引号

javascript - 从父窗口加载内容到子窗口

.net - 在 .NET 中验证 RSA 签名

Node.js 请求流管道重命名文件名

javascript - 使用 graphql-yoga 的子字段上的 Graphql 错误