首页 > 解决方案 > 在几个成功的 POST 请求获取后抛出 TypeError: Network Request Failed

问题描述

我有一个奇怪的问题。我的问题是,在连续几次执行 POST 请求后,它会抛出一个错误:TypeError Network Request Failed。但是我执行 fetch 的那几次,它们按应有的方式工作。无论我执行多少次 GET 请求,我都不会收到此错误。例如,当我注册 7 次时,会抛出此错误。或者当我登录、注销、登录等几次时,会引发此错误。我的 POST 请求示例是注册:

handleRegistration = async (name, email, password) => {
        try {
            const response = await fetch(fetchUrl + ':3000/newCustomer', {
                method: 'POST',
                headers: {
                    Accept: 'application/json',
                    'Content-Type': 'application/json',
                },
                body: JSON.stringify({
                    "name": name,
                    "email": email,
                    "password": password
                })
            });
            const data = await response.json();
            return await data.success ? FadeToast(data.message) && this.props.navigation.navigate('Login') : FadeToast(data.message);
        } catch (err) {
            console.log(err, 'Register err');
            FadeToast('Server fout');
        }
    };

// NodeJS code
app.post('/newCustomer', function(req, res)
{
    if (!req.body.email || !req.body.password) {
        return res.json({success: false, message: 'Voer alstublieft uw e-mail en wachtwoord in'});
    } else {
        const name = req.body.name;
        const email = req.body.email;
        const password = req.body.password;
        const salt = bcrypt.genSaltSync(10);
        const hash = bcrypt.hashSync(password, salt);

        if(name.length > 50) {
            return res.json({success: false, message: 'Limiet naam is 50 char.'});
        } else {
            if(email.length > 191 || password.length > 191) {
                return res.json({success: false, message: 'Max. characters is 191.'});
            } else {
                if (validateEmail(email)) {
                    createUser([name, email, hash], (err) => {
                        console.log(err);
                        if (err) return res.json({success: false, message: 'E-mail al in gebruik'});
                        return res.json({success: true, message: 'Succesvol geregistreerd'});
                    });
                } else {
                    return res.json({success: false, message: email + ' is geen geldige e-mail'});
                }
            }
        }
    }
});

我使用 NodeJS 来处理请求。我不知道如何调试这个,我还没有看到其他人遇到这个问题,所以任何帮助表示赞赏。我也尝试过 adb logcat *:E,但这似乎没有显示与数据库/react-native 或任何相关的任何内容。也许我没有在这个日志中寻找正确的东西,但我没有看到任何有用的东西。UDPATE:似乎更好的是在查询的 cb 中添加 connection.release() ,但这并不能防止错误,它似乎只会延迟它。因为当我添加它时,在执行更多的获取请求后我得到了错误。也许这与它有关?

标签: node.jsreact-nativefetch

解决方案


显然导致此错误的原因是我在查询的 cb 中没有 connection.release() 。我认为必须让它正常工作,这也是我在文档https://github.com/mysqljs/mysql中找到的代码流。“这是 pool.getConnection() -> connection.query() -> connection.release() 代码流的快捷方式。”

const  findUserByEmail  = (email, cb) => {
    db.getConnection(function(err, connection) {
        db.query('SELECT * FROM users WHERE email = ?',[email], (err, row) => {
            connection.release();
            return cb(err, row);
        });
    });
};

推荐阅读