node.js - 在几个成功的 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() ,但这并不能防止错误,它似乎只会延迟它。因为当我添加它时,在执行更多的获取请求后我得到了错误。也许这与它有关?
解决方案
显然导致此错误的原因是我在查询的 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);
});
});
};
推荐阅读
- node.js - 删除订单有效,删除咖啡无效。相同的功能
- express - 如何使用查找和更新编写 mongo 请求
- firebase - 如何在 Firebase Auth 数据库中注册新用户?
- c# - 将“开箱即用”技能(日历、待办事项等)部署到 Microsoft 虚拟助手
- flutter - 从数据库读取异步时我的列表没有显示
- visual-studio - Xamarin Android 模拟器失败
- swift - URLSession 响应不包含上次重定向的标头
- c# - 有没有办法用某个表中的列名填充组合框?
- python - 如何用熊猫列中的另一个字符串替换子字符串
- javascript - 使用 Vue 存储已编辑的表单字段以供提交