1

我正在尝试创建一些自定义错误页面,通过电子邮件向我们的开发人员发送冷融合中出现 404 或 500 错误的信息。如果在电子邮件中提供错误变量也会很有帮助。

我在coldfusion 中设置了一个错误页面,并将IIS(7) 指向它。

同样在我的 application.cfm 文件中,我声明了以下内容:

<cferror type="exception" template="#name#">
<cferror type="request" template="#name#"> 
<cferror type="validation" template="#name#"> 
<cferror type="monitor" template="#name#"> 

我的问题是在错误文件中我不能包含任何 CF 调用,CF 似乎将它们剥离。

难道我做错了什么?

提前致谢!

4

3 回答 3

6

根据下面 Travis 的评论 - 虽然cferror仍然支持使用该标签,但建议将 Application.cfm 转换为 Application.cfc(如果还没有)并改用该onError方法。我在下面列出的所有限制在使用该方法时都不适用,onError并且所有 CFML 功能都可用。这是 onError 方法的 ColdFusion 9 文档。

ColdFusion 文档中有一个完整的部分详细介绍了错误处理。但是对于您关于标签的具体问题,cferror您需要意识到发生错误时 ColdFusion 可以执行的操作是有限制的,甚至取决于错误的类型。这是从这个页面摘录的:

下表列出了适用于错误应用程序页面的规则和注意事项:

验证

  • 不能使用 CFML 标签
  • 可以使用 HTML 标签
  • 可以通过用数字符号 (#) 括起来来使用Error.InvalidFieldsError.validationHeader和变量Error.validationFooter
  • 不能使用任何其他 CFML 变量

要求

  • 不能使用 CFML 标签
  • 可以使用 HTML 标签
  • 可以使用九个 CFML 错误变量,例如Error.Diagnostics,通过用数字符号将它们括起来
  • 不能使用其他 CFML 变量

例外

  • 可以使用完整的 CFML 语法,包括标签、函数和变量
  • 可以使用九个标准 CFML 错误变量和 cfcatch 变量。使用Errorcferror作为两种类型变量的前缀
  • 可以使用其他应用程序定义的 CFML 变量
  • 要显示任何 CFML 变量,请使用 cfoutput 标签


摘自this page关于每种异常类型的可用错误变量:

仅验证

    error.validationHeader  Validation message header text.
    error.invalidFields     Unordered list of validation errors.
    error.validationFooter  Validation message footer text.

请求和例外

    error.diagnostics       Detailed error diagnostics from ColdFusion.
    error.mailTo            E-mail address (same as value in cferror.MailTo).
    error.dateTime          Date and time when error occurred.
    error.browser           Browser that was running when error occurred.
    error.remoteAddress     IP address of remote client.
    error.HTTPReferer       Page from which client accessed link to page where error occurred.
    error.template          Page executing when error occurred.
    error.generatedContent  The content generated by the page up to the point where the error occurred.
    error.queryString       URL query string of client's request.

仅例外

    error.message           Error message associated with the exception.
    error.rootCause         The root cause of the exception. This structure contains the information that is returned by a cfcatch tag.
                            For example, for a database exception, the SQL statement that caused the error is in the error.RootCause.Sql variable.
                            For Java exceptions, this variable contains the Java servlet exception reported by the JVM as the cause of the "root cause" of the exception.
    error.tagContext        Array of structures containing information for each tag in the tag stack. The tag stack consists of each tag that is currently open.
    error.type              Exception type.

注意:如果 type = "exception",你可以用前缀 cferror 代替 Error;例如,cferror.diagnostics、cferror.mailTo 或 cferror.dateTime。

于 2013-02-12T18:25:26.700 回答
1

出于这个原因,使用模板最准确,例如... dbc.cfm。在 dbc.cfm 中编写邮件发送代码。

<cftry>
        <cfquery name="GetData" datasource="#Application.ds#" dbtype="ODBC" username="#Application.UserName#" password="#Application.Password#">
            SELECT m.price
            FROM productvendorsmap m
            WHERE m.productid = <cfqueryparam cfsqltype="cf_sql_integer" value="#ProductId#">
            AND m.vendorid = <cfqueryparam cfsqltype="cf_sql_integer" value="#VendorIdd#">
        </CFQUERY>
        <cfcatch type="Database">
            **<cfinclude template="dbc.cfm">**
        </cfcatch>
    </cftry>
于 2013-02-14T14:09:32.137 回答
1

您的错误文件是否具有 .cfm 扩展名?

此外,如果您每发送一次 404 电子邮件,您可能会面临邮件炸弹攻击。您可能会更好地添加诸如 Google Analytics 之类的内容来检查 404。500 错误可能意味着许多事情出错了,因此 CF 可能无论如何都不会发送电子邮件。

于 2013-02-12T17:53:10.570 回答