Javascript 引发的nodejs服务器错误未传回AJAX
我有以下Javascript 引发的nodejs服务器错误未传回AJAX,javascript,jquery,node.js,ajax,Javascript,Jquery,Node.js,Ajax,我有以下AJAX将输入的数据发送到节点服务器,并且控制器将检查数据库中是否存在此类数据。 如果我输入的数据正确,那么一切正常 但是,我尝试输入数据库没有的任何内容,它立即抛出一个错误,导致服务器停止。错误表明我没有处理该事件,因此我尝试在控制器中使用res.json(err)而不是抛出新错误,希望在error键下将错误传递回AJAX,但仍然不起作用。错误仍然会被抛出,节点服务器会自行终止 我希望服务器继续并提醒用户输入的数据不在数据库中,但我不知道为什么我的方法不正确。 如果我能够首先从服务器端
AJAX
将输入的数据发送到节点服务器,并且控制器将检查数据库中是否存在此类数据。
如果我输入的数据正确,那么一切正常
但是,我尝试输入数据库没有的任何内容,它立即抛出一个错误,导致服务器停止。错误表明我没有处理该事件,因此我尝试在控制器中使用res.json(err)
而不是抛出新错误
,希望在error
键下将错误传递回AJAX,但仍然不起作用。错误仍然会被抛出,节点服务器会自行终止
我希望服务器继续并提醒用户输入的数据不在数据库中,但我不知道为什么我的方法不正确。
如果我能够首先从服务器端返回错误消息,我就考虑使用这个SO线程。
为了解决服务器停止的问题,我使用了从这个链接引用的app.js
中的代码
我不确定我是否应该在我的案例中使用公认的答案
function createProduct(inputval){
let inputAction = window.location.pathname;
$.ajax({
type: "POST",
url: inputAction,
data: {order: inputval.split('-')[0].trim(), lot: inputval.split('-')[1].substring(0,5)},
success: function(data) {
$('#product').val('');
//Another function to add HTML
display(data);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("XHR" + jqXHR)
console.log("Status" + textStatus)
console.log(errorThrown)
}
});
}
控制器文件
主文件:app.js
您应该为响应使用正确的状态代码。我建议像下面的代码片段那样更改控制器
exports.createProduct = function (req, res) {
db.Product.findOne({ "order": req.body.order, "lot": req.body.lot }).exec(function (err, product) {
if (err){
res.status(500).end();//means internal server error
} else if (!product) {
res.status(404).end();//means product not found
} else {
res.json(product);
}
});
};
多亏了其他社区的反馈,我终于找到了答案,所以我想在这里分享一下。我忽略了这样的陈述,这太简单和愚蠢了
首先,可以删除app.js
中的代码
其次,根据@Milad Aghamohammadi给出的答案。而不仅仅是:
使用:
这样,错误就可以由AJAX错误函数处理,并且节点服务器不会从事件循环中终止
process.on('uncaughtException', function (err) {
console.error(err);
console.log("Node NOT Exiting...");
});
exports.createProduct = function (req, res) {
db.Product.findOne({ "order": req.body.order, "lot": req.body.lot }).exec(function (err, product) {
if (err){
res.status(500).end();//means internal server error
} else if (!product) {
res.status(404).end();//means product not found
} else {
res.json(product);
}
});
};
res.status(500).end();
return res.status(500).json({err: "Server error"});