Как исправить ошибку с помощью функции обратного вызова? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь создать приложение, которое поможет пользователю найти друга на основе определенных вопросов, на которые он ответил.Я продолжаю сталкиваться с ошибкой, которая говорит: «TypeError [ERR_INVALID_CALLBACK]: обратный вызов должен быть функцией», когда код попадает в строку 46 файла, которая использует fs для изменения содержимого другого файла, чтобы добавить информацию, введенную пользователемна веб-странице для этого приложения, и я понятия не имею, почему это происходит.

const fs = require('fs');

module.exports = function(app, path) {

    app.get('api/friends', function(req, res) {
        fs.readFile("app/data/friends.js", "utf8", function(err, data) {
            if (err) throw err;

            else {
                res.json(JSON.parse(data));
            }
        });
    });

    app.post('/api/friends', function(req, res) {
        let results = [];

        const postResponse = JSON.stringify(req.body);

        fs.readFile('app/data/friends.js', function (err, data) {
            if (err) throw err; 

            let friendFile = JSON.parse(data);
            console.log(friendFile[0].answers);
            let closestMatch = 0;
            let matchScore = 999999999999999;

            for (let i = 0; i < friendFile.length; i++) {
                console.log(friendFile.length);
                let spaceBetween = 0;
                for (let j = 0; j < friendFile[i].answers.length; j++) {
                    // ['answers[]'][j]
                    console.log(req.body.answers[j]);
                    spaceBetween += Math.abs((parseInt(req.body.answers[j]) - parseInt(friendFile[i].answers[j])));
                }
                if (spaceBetween <= matchScore) {
                    matchScore = spaceBetween;
                    closestMatch == i;
                } 
            }

            results.push(friendFile[closestMatch]);

            friendFile.push(JSON.parse(postResponse));

            fs.writeFile("app/data/friends.js", JSON.stringify(friendFile));
                res.send(results[0]);
        })
    })
}

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

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Просто добавьте функцию обратного вызова при вызове writeFile

let callback = function(err) {
 if (err) throw err;
  console.log('The file has been saved!');
};
fs.writeFile("app/data/friends.js", JSON.stringify(friendFile), callback);
0 голосов
/ 06 мая 2019

Полагаю, это экспресс-приложение, да?Просто измените ..

fs.writeFile("app/data/friends.js", JSON.stringify(friendFile));

... на ...

fs.writeFile("app/data/friends.js", JSON.stringify(friendFile), function (err) {
  if (err) {
    res.sendStatus(500) // Let the client know we died
    throw err; // Or do something else.
  }

  // If you want to add something for after the file is written to disk put it here.
  // Code execution won't reach this point if the error above throws.
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...