Node js: fs WriteFile записывает данные в файл дважды - PullRequest
0 голосов
/ 23 марта 2020

Код fs.writeFile в бэкэнде выполняется дважды. Добавление данных появляется в консоли дважды, а данные записываются дважды в файл JSON.

Есть идеи, почему это происходит? Любой совет очень ценится.

РЕДАКТИРОВАТЬ: это похоже на интерфейсную проблему. onFavSubmit выполняется дважды ...

Front-end

    constructor (props) {
        super (props) 
            this.state = {
                inputOne: '',
                chosenOne: ['Favourite Movie', 'X'],
                chosenTwo: ['2nd Favourite Movie', 'X'],
                chosenThree: ['3rd Favourite Movie', 'X'],
                movies:[],
            };
            this.onFavSubmit = this.onFavSubmit.bind(this);
            this.onReset = this.onReset.bind(this);
    }
    onFavSubmit = event => {
        const newFav = {
            first: this.state.chosenOne[0],
            second: this.state.chosenTwo[0],
            third: this.state.chosenThree[0]
        }

        if(this.state.chosenOne[1] === 'X' || this.state.chosenTwo[1] === 'X' || this.state.chosenThree[1] === 'X'){
            alert ('Need All 3 Favourite Shows')
            event.preventDefault();
        } else {
            axios.post('http://localhost:8001/fav', {newFav})
            .then(
                alert('Successfully Added'),
                this.onReset()
            )
            .catch(err => console.log(err.response))
        }
    }
<button className="fav__button" type="button" onClick={this.onFavSubmit}>Click Me</button>

Back-end

const express = require("express");
const favData = require("../data/fav.json")
const fs = require ('fs')
const router = express.Router();

router.get("/", (_, res) => {
    res.json(favData);
  });

router.post("/", (req, res) => {
    const newFirst = req.body.newFav.first;
    const newSecond = req.body.newFav.second;
    const newThird = req.body.newFav.third;

    const newfavData = {
        First: newFirst,
        Second: newSecond,
        Third: newThird,
    };

    fs.readFile('./data/fav.json', 'utf-8', function (err, data){
        var json = JSON.parse(data);
        json.push(newfavData);
        console.log(newfavData)
        fs.writeFile('./data/fav.json', JSON.stringify(json), function(err){
            if (err) throw err;
            console.log('data appended')
            return;
        })
    })

});

module.exports = router;

1 Ответ

0 голосов
/ 23 марта 2020

У меня недостаточно репутации, поэтому я не могу комментировать. Вы пытались закомментировать this.onReset() и посмотреть, решит ли это проблему?

Были случаи, когда я отправлял запрос на "/" при перезагрузке.

...