我有一个奇怪的问题。我的问题是,在连续执行两次获取POST请求后,它会引发错误:TypeError网络请求失败。但是在我执行提取的那两次中,它们按预期方式工作。无论执行多少次,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(),但这仅不能防止错误发生,而只是延迟了它。因为当我添加它时,即使执行了更多提取请求,也会收到错误消息。也许这与它有关?
显然引起此错误的原因是,我在查询的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);
});
});
};