簡體   English   中英

在Node.js目錄中編輯和刪除文件的簡單方法?

[英]A Simple Way To Edit And Delete files in a directory in Node.js?

您好,我正在使用express.js創建一個簡單的博客,並使用data.json文件創建/更新/刪除基於id的帖子。 每次我這樣做時,我都使用fs.writeFile 使用json數組中的段數據創建和更新markdown帖子。 因此,當我創建一個名為First Post的帖子時,在/ path文件夾中會得到一個first-post.md文件。 問題:每次更新文件並使用fs.writeFile時,我都在創建新的文件路徑而不刪除舊文件嗎?

例:

更新json數組上的名稱數據:

第一篇文章 ,以第一篇文章的更新 ,我收到了降價文件first-post-update.md。但老first-post.md文件仍然存在。

是否可以刪除目錄路徑中沒有 data.json文件中每個段數據相應鏈接的每個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');
};

您可能希望研究使用像MongoDB或SQL這樣的數據庫系統來代替它。 使用數據庫而不是自己編寫所有這些東西通常會更容易。 可以這么說,無需重新發明輪子。 看起來您已經在使用它來存儲元數據,為什么不對整篇文章這樣做呢?

話雖這么說,是的,似乎您的初始代碼段應該可以工作。

您是否考慮過在升級過程中刪除舊的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");
    }
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM