Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么fs写入文件在localhost中工作,但在heroku应用程序中不工作?_Javascript_Node.js_Heroku_Fs - Fatal编程技术网

Javascript 为什么fs写入文件在localhost中工作,但在heroku应用程序中不工作?

Javascript 为什么fs写入文件在localhost中工作,但在heroku应用程序中不工作?,javascript,node.js,heroku,fs,Javascript,Node.js,Heroku,Fs,我使用fs writefile方法将文件写入节点服务器。它在我的电脑上工作,没有问题。但它在生产上不起作用(heroku) 下面的代码适用于我的本地网络,但不适用于heroku。当我在heroku上运行它时,没有任何错误,但它不会覆盖现有文件 router.post("/writefile/overwritefile",function(req,res){ if(req.body.bult1){ var bult1red = req.body.bult

我使用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("/");
 });
router.post(“/writefile/overwritefile”),函数(req,res){
if(要求主体bult1){
var bult1red=req.body.bult1;
var removenewline=bult1red.replace(/(\r\n |\n |\r)/gm,“”;//删除新行空间
var convertoarray=removenewline.split(',);//将字符串转换为数组
var i=0;
var buls=“”;
forEach(函数(元素、索引、数组){
buls+=“
  • ”+元素+“
  • \n”; i++; if(i==array.length){ bult1='
      \n'+ buls+ “
    \n”; } }); }否则{ bult1=“”; } var writethis='\n'+ “\n”+ “\n”+ “\n”+ “\n”+ “\n”+ '正在测试fs写入\n'+ “\n”+ '内容{\n'+ '边框:20px实心#bdc3c7;\n'+ '填充:20px;\n'+ '宽度:80%;\n'+ '页边距:20px自动;\n'+ “}\n”+ “\n”+ '\n'+ “\n”+ “\n”+ bult1+“\n”+ '\n'+ “\n”+ “\n”; fs.writeFile('views/files/testwritebeg.ejs',writethis,(err)=>{ 如果(错误)抛出错误; }); res.redirect(“/”); });

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

    使用
    fs
    时,应避免使用相对路径,而使用
    绝对路径。您可以使用
    \uuuu dirname
    \uuuu filename
    。 因此,您可以测试:

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

    当我遇到这个问题时,我检查的第一件事(因为这通常是问题所在)是我试图保存它的位置实际上存在于服务器上。正如在
    views/files/
    中一样,实际的目录文件路径应该以
    \uu dirname
    开头,以正确地指向目录。是的,确实存在我用来编写文件的目录。它在我的本地网络上工作。问题出在heroku服务器上。我遇到了类似的问题。从下面的注释中,我发现如果文件夹是空的,它就永远无法访问
    Github
    ,也永远无法访问
    Heroku
    。建议的修复方法是在其中放置一个任意文件,如
    .gitignore
    ,引用自此。这是否回答了您的问题@Vijay Singh问题在于没有使用目录。我使用绝对目录使用
    path.resolve
    ,但它不起作用。在我的问题中,第一个代码起作用,但第二个代码不起作用。@wzwd您确定
    path
    已经存在吗?也许你应该先创建路径。@阿米尔:是的,我使用
    path创建了一个路径。解析
    并在上面的代码中使用它,然后我尝试了它,但它不起作用。