如何从NetSuite中的RESTlet中抛出自定义错误?

时间:2016-08-15 16:37:27

标签: javascript error-handling netsuite

我试图从我的RESTlet中抛出自定义错误,并且我试图使其类似于NetSuite的错误格式。我希望客户端看到HTTP代码400.当我使用脚本v1时,我只是这样做:

throw nlapiCreateError('MY_ERROR_CODE', 'My message');

在这种情况下,我得到了这样的答案(这是我的目标):

{
    "error":
    {
        "code": "MY_ERROR_CODE",
        "message": "My message"
    }
}

但是当我使用脚本v2时,我这样做:

    throw error.create({
        name: 'MY_ERROR_CODE',
        message: 'My message'});

我明白了:

{
    "error":
    {
        "code": "JS_EXCEPTION",
        "message": "{"type":"error.SuiteScriptError","name":"MY_ERROR_CODE","message":"My message","stack":["createError(N/error)","prevalidations(SuiteScripts/RESTlet.js:152)","doPost(SuiteScripts/RESTlet.js:86)","createError(N/error)"],"cause":{"name":"MY_ERROR_CODE","message":"My message"},"id":""}"
    }
}

如果我使用v2,有人能告诉我如何获得答案吗?

5 个答案:

答案 0 :(得分:1)

我没有足够的代表来回复答案。因此,作为 Prajakta 解决方案的后续,不是创建错误对象然后抛出它,而是引用消息字段。您可以按照以下方式同时创建和抛出:

 throw error.create({
   name: 'FAILURE',
   message: 'Error details here',
   notifyOff: false
}).message;

答案 1 :(得分:0)

如果在抛出错误后检查结果代码,您应该看到它实际上是400.即使您有错误,Netsuite仍然会返回一个包含错误详细信息的响应正文。你得到什么代码?

答案 2 :(得分:0)

如果您尝试添加以下内容怎么办?

function createError(eTitle, eMessage) {
        var errorObj = error.create({
            name: eTitle,
            message: eMessage,
            notifyOff: true,
        })
        throw errorObj.name + ": " + errorObj.message
}

答案 3 :(得分:0)

请检查以下代码,这将起作用!

var err = error.create({名称:'MY_ERROR_CODE',消息:'我的消息'})

err.toString = function(){return err.message};

抛出错误;

答案 4 :(得分:0)

您可以使用 throw myCustomError.message 代替 throw myCustomError

以下是参考代码块。让我们知道这是否有帮助


var myCustomError = error.create({
            name: 'FAILURE',
            message: 'Error details here',
            notifyOff: false
});


throw myCustomError.message;