如何在cfcatch块中检查本机代码错误?

时间:2018-08-31 11:54:31

标签: coldfusion try-catch coldfusion-2016

我有cfcatch块,应该捕获任何异常。一旦检测到错误,我将构建一个自定义函数,该函数以NativeErrorCode作为参数。如果错误代码是我正在寻找的错误代码,则表明重复/ PK违规,我有自定义消息将返回给用户。如果错误代码不是我要查找的错误代码,则将返回全局消息。但是,我遇到的问题是ColdFusion返回了NativeErrorCode不存在的错误消息。我知道本机错误代码是为数据库类型保留的。有没有一种方法可以检查类型并防止出现此问题,或者有更好的方法可以解决此问题?这是我的代码示例:

<cftry>
    // Stored procedure call
    <cfcatch type="any">
        <cfset local.fnResults = {status : "400", message : Application.functions.errorCatch(cfcatch.NativeErrorCode)}>
    </cfcatch>
</cftry>

public string function errorCatch(required string ErrorCode) {
    local.message = "";

    if(arguments.ErrorCode EQ 2627){
        local.message = "Error! Cannot insert duplicate value.";
    }else{
        local.message = "Error! Please contact your administrator.";
    }

    return message;
}

您可以在上方看到errorCatch函数的工作方式以及正在检查的代码。我仍然希望cfcatch捕获代码中的任何异常,而不仅仅是数据库错误。

1 个答案:

答案 0 :(得分:2)

我想到了两种方法来处理分支捕获逻辑,具有2个捕获块或检查捕获对象是否具有所需的数据。

在我的第一个示例中,我添加了一个专门用于数据库错误的catch块。如果错误的类型是数据库,则将包含本机错误代码;如果数据库驱动程序不包含本机错误代码,则将为-1。对于any参数,我只添加了默认的返回字符串。您可能需要具有可处理非数据库类型异常的自定义逻辑。

<cftry>
    // Stored procedure call
    <cfcatch type="database">
       <cfset local.fnResults = {status : "400", message : Application.functions.errorCatch(cfcatch.NativeErrorCode)}>
    </cfcatch>

    <cfcatch type="any">
        //Non database related error
        <cfset local.fnResults = "Error! Please contact your administrator.">
    </cfcatch>
</cftry>

在我的第二个示例中,我只是在尝试传递它之前,通过检查NativeErrorCode是否存在来更新了errorCatch函数。

    <cfcatch type="any">
        //Passing the default error code value, you may want custom logic here
        <cfset local.fnResults = {
            status : "400", 
            message : Application.functions.errorCatch( cfcatch.keyExists("NativeErrorCode")?cfcatch.NativeErrorCode:-1)
        }>
    </cfcatch>