0

Есть обработчик запросов от сервера, задача которого вызвать написанную мной функцию, которая в свою очередь перезапишет json файл, который должен быть в дальнейшем отправлен на сервер.

Серверная часть

router.post('/currentDir1', (req, res) =>{  
        console.log("POST");
        const fs = require('fs');
        let body = "";   
        let pathToFile = "";
        console.log(req.body);
    req.on("data", function (data) {
        body += data;
    });

    req.on("end", function(currentData) {
        console.log(JSON.parse(body));
        currentData = JSON.parse(body);


    console.log("еще тут");

    async function takeValue(){
            if(currentData.sizeOrType === "<папка>"){
                let dir = currentData.dir + currentData.fileName;
                // dir = "C:\\totalcmd";
                console.log(dir);                
                if(currentData.whichScreen){
                    console.log(currentData.whichScreen);                    
                    let result = await foo(dir, './data/firstScreen.json');
                    pathToFile = './data/firstScreen.json';

                    var json1 = JSON.parse(fs.readFileSync('./data/firstScreen.json', 'utf8'));

                    if(result){
                        console.log("таку хули"); 
                        console.log(json1);                 
                        res.json(json1);
                    }                        

                }else{
                    console.log('aaaa');
                    foo(dir, './data/secondScreen.json');
                    pathToFile = './data/firstScreen.json';
                    res.sendFile(path.resolve('./data/secondScreen.json'));

                } 

            }

        }
        console.log("я тут");
        takeValue();          
    });      
})

Основная функция, которая отвечает за перезапись json

const fs = require('fs');

var Foo = async function(dir, pathToFile){ let Mode = require('stat-mode'); // проверка дириктори или файл let temp; //вспомогательная переменная let jsonFile = { table: [] };

 console.log("FOO WAS STARTED");

 fs.readdir(dir, function(err, items) {   // Вроде работает :)
    for (let i=0; i<items.length; i++) { //массив всех файлов текущей директории       
        try{                  
            fs.stat(dir +"\\"+ items[i], function(err, stats){
                    // console.log(dir +"\\"+ items[i]);
                    try{
                        let mode = new Mode(stats); // определяем папка или файл             
                        if(mode.isDirectory()){
                        temp = "<папка>";
                        } else{
                            temp = stats.size.toString() + " байт";
                        }                
                        jsonFile.table.push({icon:i, fileName:items[i], sizeOrType: temp , dateOfChange: stats.mtime, dir: dir}); //добавляем данные                    
                         fs.writeFile(pathToFile, JSON.stringify(jsonFile), (err)=>{
                            if(err) console.log("error");
                        });

                    }
                    catch(e){
                        console.log(e);
                    }
            });
        }
        catch(e){                
            console.log(e);
            continue;
        }        
    }    
});
return true;

}

На всякий случай приложу кусочек, который отправляет запрос на сервер, но я не думаю, что проблема в нем.

methods:{
        clickOnRow: function(elem, whichScreen){
          this.clicks++   
          if(this.clicks === 1) {
            var self = this
            this.timer = setTimeout(function() {            
            console.log("одинарный");                 
              self.clicks = 0
            }, this.delay);
          } else{
             clearTimeout(this.timer);
             console.log("двойной");
         console.log(elem);

         elem['whichScreen']  = whichScreen;    
        //  console.log(this.helper);
        //  this.nameOfMethod(elem);
         this.clicks = 0; 
        fetch('/currentDir1',{
                method: 'POST',
                mode: 'cors',
                headers: {
                    'Content-Type': 'application/json',
                    'Accept': 'application/json'                 
                },
                body: JSON.stringify(elem)                
                })
                // .then(response => console.log(response))  
                .then(response => response.json())    
                .then(json => this.helper = json.table)
                .then(json => console.log(json))

                .then(this.$emit("newvalue", this.helper, whichScreen))

у меня совсем закончились идеи как решить это проблему, помогите, пожалуйста.

mrEvgenX
  • 3,082
MarEeee
  • 11
  • 1
    Очередной вопрос из серии "вот вам портянка кода, в ней что-то не работает, поразбирайтесь-ка сами", я не знаю, что тут сказать... Прочитайте, на всякий случай это "как задать хороший вопрос", вдруг станет лучше – mrEvgenX Oct 02 '20 at 15:56
  • 1
    Вообще не нонятно что означает приходят на сервер устаревшие данные. По идее что вы на сервер отправили - то он и получил. Думаю это проверить не особо сложно) А вот клиент может получить устаревшие данные по разным причинам, даже по причине того, что сервер например не обьяснил (не дал соответствующий заголовок) что данные могут устареть - браузер может подумать что не нужно повторно смотреть что ответит сервер и показать старый ответ в качетсве ответа. – nick_n_a Oct 02 '20 at 16:16
  • @nick_n_a, https://ru.stackoverflow.com/questions/1185121/%d0%9a%d0%b0%d0%ba-%d0%bf%d0%be%d0%bb%d1%83%d1%87%d0%b8%d1%82%d1%8c-%d0%ba%d0%be%d1%80%d1%80%d0%b5%d0%ba%d1%82%d0%bd%d1%8b%d0%b5-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d0%b5-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d0%b2%d1%8b%d0%b7%d0%be%d0%b2%d0%b0-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8#comment2063486_1185121 – nörbörnën Oct 02 '20 at 16:41

0 Answers0