【问题标题】:Why fs write file working in localhost but not working in heroku app?为什么 fs 写入文件在 localhost 中工作但在 heroku 应用程序中不工作?
【发布时间】:2019-04-30 10:21:53
【问题描述】:

我使用 fs writefile 方法将文件写入节点服务器。它在我的电脑上运行没有问题。但它不适用于生产(heroku)。

下面的代码适用于我的本地网络,但不适用于 heroku。当我在 heroku 上运行它时没有错误,但它不会覆盖现有文件。

router.post("/writefile/overwritefile",function(req,res){     
    if(req.body.bult1){
             var bult1red = req.body.bult1;
             var removenewline = bult1red.replace(/(\r\n|\n|\r)/gm,"");  // remove new line space 
         var convertoarray = removenewline.split(',');  // convert the string to an array 
         var i = 0;
         var buls = "";
         convertoarray.forEach(function(element, index, array){
              buls+= "<li>" +  element + "</li> \n";
               i++;
              if (i === array.length){
                     bult1 = '<ul> \n'+
                                 buls + 
                              '</ul>\n';                                                    
               }
           });
           }else{
                  bult1 = "";
            }

     var writethis = '<!DOCTYPE html> \n'+
            '<html>\n'+
            '<head>\n'+
              '<meta charset="UTF-8">\n'+
          '<meta name="viewport" content="width=device-width, initial-scale=1.0">\n'+
          '<meta http-equiv="X-UA-Compatible" content="ie=edge">\n'+
          '<title> testing fs write </title> \n'+             
          '<style>\n'+
            'content{\n'+
                'border: 20px solid #bdc3c7;\n'+ 
                'padding: 20px;\n'+
                'width: 80%;\n'+
                'margin: 20px auto;\n'+ 
            '}\n'+
         '</style>\n'+
         '</head>\n'+             
            '<body>\n'+
                '<div class="content">\n'+
                        bult1 +  '\n'+
                '<div/> \n' +       
           '</body>\n'+
       '</html>\n';
     
      fs.writeFile('views/files/testwritebeg.ejs', writethis, (err) => {  
                      if (err) throw err;          
            });   
            res.redirect("/");
 });

在heroku服务器上使用fs writefile系统有什么限制吗?我不知道上述代码在heroku上不起作用的原因。请帮忙。

【问题讨论】:

  • 当我遇到这个问题时,我检查的第一件事(因为它通常是问题所在)是我试图将其保存到的位置实际上存在于服务器上。如views/files/ 是一个实际目录
  • 文件路径应以__dirname 开头以正确指向目录
  • 是的,我用来写文件的目录确实存在。它适用于我的本地网络。问题出在 Heroku 服务器上。
  • 我遇到了同样的问题,我遇到了this answer。从它下面的 cmets 中,我发现如果文件夹为空,它永远不会到达 Github 并且永远不会到达 Heroku。推荐的解决方法是在其中放置一个任意文件,例如 .gitignore,引用自 answer
  • 这能回答你的问题吗? Appending files in node.js on heroku

标签: javascript node.js heroku fs


【解决方案1】:

当你使用fs 时,你应该避免使用相对路径并使用absolute 路径。你可以使用__dirname__filename。 所以你可以测试一下:

  fs.writeFile(`${__dirname}/views/files/testwritebeg.ejs`, bult1 , (err) => {                  
                if (err) throw err;                           
               });    

【讨论】:

  • @Vijay Singh 问题在于没有使用该目录。我使用path.resolve 使用绝对目录,但它不起作用。在我的问题中,第一个代码有效,但第二个代码无效。
  • @wzwd 你确定path 已经存在吗?也许你应该先创建路径。
  • @amir 是的,我使用path.resolve 创建了一个路径并在上面的代码中使用它,然后我尝试了它,但它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多