.ajax调用永远不会返回

时间:2017-05-03 20:19:58

标签: javascript jquery node.js express

我正在使用Express和Node。我有一些代码将JSON发布到另一个将其添加到数据库中的服务。

逻辑正在做他们应该做的事情,但我正在做的ajax电话永远不会回归,在网络' Chrome开发工具中的标签始终显示为'待定'最终错误出现在 net :: ERR_EMPTY_RESPONSE

谁能告诉我哪里出错了?

Ajax Call

$.ajax
({
    type: "POST",
    url: "/order",
    contentType: 'application/json',
    data: orderDataJson,

    success: function () {

        alert("success!");
    },


    error: function (XMLHttpRequest, textStatus, errorThrown) {

        alert("Something went wrong checking out!\n" + textStatus + "\n" + errorThrown);
    }

});

以上路由到/ order,然后将数据发布到其他服务:

app.post("/order", function(req, res, next)
{
    var options = {
        uri: endpoints.ordersUrl + "order",
        method: 'POST',
        json: true,
        body: req.body
    };

    request(options, function(error, response, body) {

        if (error !== null )
        {
            return;
        }

        if (response.statusCode == 200 && body != null && body != "")
        {

            if (body.error)
            {
                res.status(500);
                res.end();
                return;
            }

            res.end(); // UPDATED AFTER COMMENT
            return;

        }
        console.log(response.statusCode);

    });

});

这是其他服务中的相关代码(它正确地在数据库中添加内容)

if (request.method == 'POST')
{
    switch (path)
    {
        // Add a new order
        case "/order":

            var body = '';

            request.on('data', function (data) {
                body += data;
            });

            request.on('end', function () {

                var orderData = JSON.parse(body);

                // Insert into orders table
                var saleDate = getDate();

                var ordersQuery = "INSERT into orders (customerId, saledate)" +
                        " VALUES (" + orderData.customerId +",'" + saleDate + "')";

                db.query(ordersQuery, function(err, result)
                {
                    if (err)
                    {
                        throw err;
                    }

                    var orderId = result.insertId;

                    // Insert order details
                    for (var i=0; i < orderData.order.length; i++)
                    {
                        var productId = orderData.order[i].productId;
                        var quantity = orderData.order[i].quantity;

                        var orderDetailsQuery = "INSERT into orderdetails (orderID, productID, quantity)" +
                            "VALUES (" + orderId + "," + productId + "," + quantity +")";


                        db.query(orderDetailsQuery, function(err, result)
                        {
                            if (err)
                            {
                                throw err;
                            }
                        });

                    }
                });

                response.writeHead(200, {
                    'Access-Control-Allow-Origin': '*'
                });


            });

            break;

2 个答案:

答案 0 :(得分:0)

尝试在错误块中添加:

if (error !== null ) {
    res.status(500).send('Internal server error!');
    return;
}

答案 1 :(得分:0)

我解决了这个问题。问题似乎是明确的“中间件”功能应该是:

app.post("/order", function(req, res, next)

而不是:

{{1}}

来自expressjs docs

如果当前的中间件函数没有结束请求 - 响应周期,则必须调用next()将控制权传递给下一个中间件函数。否则,请求将被挂起。