Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 引发的nodejs服务器错误未传回AJAX_Javascript_Jquery_Node.js_Ajax - Fatal编程技术网

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