Javascript 如何查看heroku上脚本创建的文件的内容

Javascript 如何查看heroku上脚本创建的文件的内容,javascript,node.js,heroku,puppeteer,Javascript,Node.js,Heroku,Puppeteer,我有一个node.js脚本使用它 访问网站 刮取一些元素innerText和类 创建一个.txt文件,并将这些刮取的元素保存在该文件中 重复 这可以在本地工作,但在我将应用部署到之后就不行了 我尝试了heroku bash-a myappname,ls来查看内容,它只显示我推送到heroku的文件和文件夹 我还尝试使用heroku git:clone-a myapp来克隆repo,它只克隆并保存了我推送到heroku的代码文件,而我正在写入磁盘的.txt不存在 下面的屏幕截图显示预期的文本文件不

我有一个node.js脚本使用它

  • 访问网站
  • 刮取一些元素
    innerText
    和类
  • 创建一个.txt文件,并将这些刮取的元素保存在该文件中
  • 重复
  • 这可以在本地工作,但在我将应用部署到之后就不行了

    我尝试了heroku bash-a myappname,
    ls
    来查看内容,它只显示我推送到heroku的文件和文件夹

    我还尝试使用heroku git:clone-a myapp来克隆repo,它只克隆并保存了我推送到heroku的代码文件,而我正在写入磁盘的.txt不存在

    下面的屏幕截图显示预期的文本文件不在那里,只有我上传的内容在那里

    以下是推送到Heroku的代码:

    var http=require('http');
    常数fs=要求('fs');
    const puppeter=require('puppeter');
    异步函数数据(url){
    var-gotData=false;
    const browser=wait puppeter.launch({args:['--no sandbox']});
    const page=wait browser.newPage();
    等待页面。转到(url);
    //等待所有6个球及其内部文本出现
    wait page.waitForFunction(
    () => {
    返回(
    document.querySelectorAll('.ball')[2]。innerText!=''&&
    document.querySelectorAll('.ball')[3]。innerText!=''&&
    document.querySelectorAll('.ball')[4]。innerText!=''&&
    document.querySelectorAll('.ball')[5]。innerText!=''&&
    document.querySelectorAll('.ball')[6]。innerText!=''&&
    document.querySelectorAll('.ball')[7]。innerText!=''
    );
    },
    {超时:100000}
    );
    //从左边开始计算六个球的颜色和编号
    const[ball1,ball2,ball3,ball4,ball5,ball6]=等待页面。评估(()=>{
    const ball1=document.queryselectoral('.ball')[2];
    const ball2=document.queryselectoral('.ball')[3];
    const ball3=document.queryselectoral('.ball')[4];
    const ball4=document.queryselectoral('.ball')[5];
    const ball5=document.queryselectoral('.ball')[6];
    const ball6=document.queryselectoral('.ball')[7];
    //返回颜色及其编号
    返回[
    {number:ball1.innerText,颜色:ball1.classList[1]。拆分('-')[1]},
    {number:ball2.innerText,颜色:ball2.classList[1]。拆分('-')[1]},
    {number:ball3.innerText,颜色:ball3.classList[1]。拆分('-')[1]},
    {number:ball4.innerText,颜色:ball4.classList[1]。拆分('-')[1]},
    {number:ball5.innerText,颜色:ball5.classList[1]。拆分('-')[1]},
    {number:ball6.innerText,颜色:ball6.classList[1]。拆分('-')[1]},
    ];
    });
    //将时间转换为尼日利亚时区
    函数convertz(日期,tzString){
    返回新日期(
    (日期类型==='string'?新日期(日期):日期)。ToLocalString('en-US'{
    时区:tzString,
    })
    );
    }
    const convertDate=convertTZ(新日期(),“非洲/拉各斯”);
    //将返回的数据保存到变量中
    常数结果=
    convertDate.getHours()+
    ':' +
    convertDate.getMinutes()+
    ':' +
    convertDate.getSeconds()+
    ' ' +
    [
    `${ball1.color}-${ball1.number}`,
    `${ball2.color}-${ball2.number}`,
    `${ball3.color}-${ball3.number}`,
    `${ball4.color}-${ball4.number}`,
    `${ball5.color}-${ball5.number}`,
    `${ball6.color}-${ball6.number}`,
    ];
    //关闭浏览器
    等待浏览器关闭();
    //创建一个文件,并使用尼日利亚时区中的今天日期和月份将其命名
    变量文件名=
    'day-'+convertDate.getDate()+'_'+'month-'+convertDate.getMonth()+'.txt';
    //将结果写入文件
    fs.appendFile(文件名,结果+'\n',(错误)=>{
    如果(错误){
    控制台日志(err);
    }否则{
    gotData=true;
    if(gotData==true){
    //将数据重置回false
    gotData=false;
    //重新运行数据
    callscrapedatareach();
    }
    }
    });
    }
    刮取数据(
    'https://logigames.bet9ja.com/Games/Launcher?gameId=11000&provider=0&sid=&pff=1&skin=201'
    );
    函数callscrapedatareach(){
    刮取数据(
    'https://logigames.bet9ja.com/Games/Launcher?gameId=11000&provider=0&sid=&pff=1&skin=201'
    );
    }
    ///*config.httpPort*/
    //“在%s模式下侦听端口%d的节点服务器”,this.address().port,app.settings.env;
    http.createServer((请求、响应)=>{
    if(request.url=='/'&&request.method=='GET'){
    writeHead(200,{'Content-Type':'text/html'});
    response.end('your app is working','utf-8');
    }
    }).listen(process.env.PORT | | 3000,()=>{
    log(“服务器工作”);
    });
    
    请参见Heroku帮助中的

    Heroku没有给你真正的磁盘,任何文件写入都不能保证持久

    他们建议您使用外部存储,例如AmazonS3。它们提供。

    请参见Heroku帮助中的

    Heroku没有给你真正的磁盘,任何文件写入都不能保证持久

    他们建议您使用外部存储,例如AmazonS3。他们提供