[英]How to throw a custom error from a RESTlet in 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,谁能告诉我如何在使用 v1 时获得答案?
我没有足够的代表来回复答案。 因此,作为 Prajakta 解决方案的后续,不是创建错误对象然后抛出它,而是引用消息字段。 您可以按照以下方式同时创建和抛出:
throw error.create({
name: 'FAILURE',
message: 'Error details here',
notifyOff: false
}).message;
似乎您不走运,因为帮助文档没有解释您已经尝试过的内容。
也就是说,您可以进入 NetSuite 调试器 (debugger.netsuite.com) 并在错误对象被抛出之前对其进行探索。 也许您可以设置未记录的属性。 探索 NetSuite 内部结构可能值得一试,而且通常是一次很好的学习体验。
您也可以对 v1 抛出的错误执行相同的操作,并比较它们的不同之处。 您甚至可以从头开始构建自己的 JS 错误对象!
如果您在抛出错误后检查结果代码,您应该看到它实际上是 400。即使您有错误,Netsuite 仍会返回包含错误详细信息的响应正文。 你得到什么代码?
如果您尝试添加以下内容怎么办?
function createError(eTitle, eMessage) { var errorObj = error.create({ name: eTitle, message: eMessage, notifyOff: true, }) throw errorObj.name + ": " + errorObj.message }
检查下面的代码,这将起作用!
var err = error.create({name: 'MY_ERROR_CODE', message: 'My Message'})
err.toString = function(){return err.message};
抛出错误;
您可以使用throw myCustomError.message
而不是throw myCustomError
下面是参考代码块。 让我们知道这是否有帮助
var myCustomError = error.create({
name: 'FAILURE',
message: 'Error details here',
notifyOff: false
});
throw myCustomError.message;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.