如何使用回调函数修复错误?

时间:2019-05-06 20:38:50

标签: javascript json api ecmascript-6

我正在尝试开发一个应用程序,以帮助用户根据他们回答的某些问题找到朋友。当代码到达文件的第46行时,我不断出现一个错误,提示“ TypeError [ERR_INVALID_CALLBACK]:回调必须是一个函数”,它使用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 个答案:

答案 0 :(得分:1)

只需在调用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);

答案 1 :(得分:0)

我猜这是一个快递应用,是吗?只是改变。

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.
})