我的解析POST错误数据在客户端JavaScript中不可见

时间:2018-05-11 00:10:20

标签: javascript jquery node.js restify http-error

我正在尝试使用restify在node.js中实现POST REST调用。在这种情况下,我想向浏览器发送错误。不幸的是,我还没弄清楚如何发送错误数据,以便浏览器JavaScript可以看到我发送的错误数据。

当我在浏览器上调用doPost()函数时,它会对我的服务器执行ajax POST调用。服务器代码返回错误400和包含错误消息的小JSON对象。

然后浏览器转到.fail()函数。但是,textStatus为“error”,errorThrown为空字符串,jqXHR属性为readyState:0,responseText:“”,status:0,statusText:“error”。

如何将我的错误数据从Node传输到客户端浏览器?

以下是在浏览器中运行的jQuery代码:

function doPost() {

$.ajax({
    url: "http://localhost:3979/api/address",

    type: "POST",

    // Request body.
    data: {key: "mykey", address: "myaddress"}
})

.done(function(data) {
    // Show the formatted JSON in the text area.
    $("#outputTextArea").val(JSON.stringify(data, null, 2));
})

.fail(function(jqXHR, textStatus, errorThrown) {
    // An error occurred. Display the error information.
    $("#outputTextArea").val(
        "status: " + jqXHR.status +
        ", textStatus: " + textStatus + 
        ", errorThrown" + errorThrown + "\r\n");
});

}

这是在服务器上运行的Node.js代码:

const restify = require('restify');

// Create the server.
let server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3979, function () {
    console.log(`${server.name} listening to ${server.url}`);
});

// POST call that returns an error.
server.post("/api/address", async (req, res) => {
    res.send(400, {errorMessage: "The value given does not appear to be valid."});
});

修改:res.status(422); res.send("The value given does not appear to be valid.");res.send(new BadRequestError('meh'));都以完全相同的方式失败。 jqXHR属性相同(readyState和status为零,responseText为空字符串),textStatus为“error,errorThrown为空字符串。

我针对已知的工作POST调用测试了我的.ajax代码,它获得了正确的值,包括JSON responseText。

有人可以在node.js中试试这个并告诉我我做错了什么,或者告诉我向浏览器发送错误的正确方法。到目前为止,没有任何作用。

编辑:经过进一步的测试和实验,这次使用curl,我发现我的POST调用工作并返回预期的值。

我使用此curl命令检索状态代码:

curl -s -o /dev/null -w "%{http_code}" -X POST http://localhost:3979/api/address

收到此回复:400

然后我使用了这个curl命令:

curl -X POST http://localhost:3979/api/address

收到了这个回复:

{"errorMessage":"The value given does not appear to be valid."}

所以看起来浏览器端存在问题。

This stackoverflow question似乎表明存在跨域问题(页面:www.mydomain.com/register,REST:server.mydomain.com/rest)。但是,我使用localhost执行所有这些操作,因此我看不到浏览器如何在此处看到跨域问题。

有关在localhost上运行时如何让REST POST错误显示在浏览器中的任何想法?

0 个答案:

没有答案