gpt4 book ai didi

javascript - Nodejs 服务器抛出的错误未传回 AJAX

转载 作者:行者123 更新时间:2023-12-03 00:54:06 25 4
gpt4 key购买 nike

我有以下AJAX,它会将输入的数据发送到 Node 服务器, Controller 将检查数据库中是否存在此类数据。如果我正确输入数据,那么一切都会正常工作。

但是,我尝试输入数据库没有的任何内容,它立即抛出错误,导致服务器停止。该错误表明我没有处理该事件,因此我尝试在 controller 中使用 res.json(err) 而不是 throw new Error ,希望将错误传回error键下的AJAX,但还是不行。错误仍然会被抛出,并且 Node 服务器会自行终止。

我希望服务器继续并警告用户输入的数据不在数据库中,但我不知道为什么我的方法不正确。如果我能够首先从服务器端返回错误消息,我正在考虑使用这个 SO 线程。 jQuery Ajax error handling, show custom exception messages

为了解决服务器停止的问题,我使用了从此链接引用的 app.js 中的代码

How do I prevent node.js from crashing? try-catch doesn't work

我不确定是否应该对我的案例使用已接受的答案。

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

Controller File

exports.createProduct = function (req, res) {

db.Product.findOne({ "order": req.body.order, "lot": req.body.lot }).exec(function (err, product) {
if (!product || err){
throw new Error("The product entered returns null");
}
res.json(product);
});
};

Main File: app.js

process.on('uncaughtException', function (err) {
console.error(err);
console.log("Node NOT Exiting...");
});

最佳答案

您应该使用正确的状态代码进行响应。我建议更改您的 Controller ,如下面的代码片段

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

关于javascript - Nodejs 服务器抛出的错误未传回 AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52916444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com