gpt4 book ai didi

coldfusion - Coldfusion 8对特定错误做出响应

转载 作者:行者123 更新时间:2023-12-03 08:14:30 25 4
gpt4 key购买 nike

我正在编写一个API,它将我们的数据库的一部分公开给客户端。此API的一部分要求针对特定条件发送某些HTML响应代码。通过简单的检查通常很容易,但是我看不到如何在向SQL提交无效日期的情况下捕获(例如)“InvalidDateTimeException”错误。

我曾尝试转储ERROR和cfcatch变量,但是尽管它们生成了巨大的堆栈跟踪,但我看不到任何可轻松解析以检查特定类型错误的字段(缺少对错误消息或堆栈跟踪进行文本搜索)。

我也可以使用regex进行预检查,例如

(\ d {4})-(\ d {2})-(\ d {2})(\ d {2}):(\ d {2}):(\ d {2})

但这仍然会产生无效的日期。 Coldfusion还提供了一些日期验证,但我已经读到它是particularly bad。这也不会帮助其他不处理日期的情况。

简而言之:对Coldfusion中的“InvalidDateTimeException”等特定错误使用react的最佳方法是什么?

[编辑]
评论中的一些说明-我们正在使用MYSQL 5和cfqueryparams。我们在澳大利亚在这里使用'euro'日期格式,但是如果api用户提供ISO格式日期(yyyy-mm-dd)以避免混淆,将是首选方法。

最佳答案

好吧....我的建议是在错误到达SQL之前就将其捕获。您没有指定DBMS(SQL Server,MySQL等),所以我将重点介绍ColdFusion解决方案。我希望这些建议之一可以为您指明正确的道路。

选项:

  • 您链接到的有关Coldfusion日期验证的文章提到了isValid函数作为推荐的解决方案。根据建议考虑将其与USDATE验证类型一起使用。
  • 如果您在API方法中使用的是CFC或至少是cffunction,则可以使用cfargument type =“date”来帮助确保日期有效(尽管我的感觉是与isDate一样宽大)
  • 在cfquery标记内,应该对所有传递的参数使用cfqueryparam,尤其是直接从用户传递的参数(无论是表单发布还是API调用)。您应该使用cfqueryparam cfsqltype = CF_SQL_DATE

  • 使用上述任何一种方法(或所有方法),都应将Coldfusion代码包装在try/catch构造中,并且要处理的错误要容易得多。

    根据您的DBMS,您可能也可以在那里访问Try/catch构造。

    **** 更新:

    阅读您对国际转化问题的评论后,我可以选择两种方法:

    请记住,我还没有测试任何代码或任何东西。

    首先,也许国际功能可以为您提供帮助。

    http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_in-k_37.html

    使用Setlocale将位置设置为英语(澳大利亚),然后使用LSParseDateTime读取yyyy-mm-dd格式,然后使用dateformat使用mm/dd/yyyy或期望的任何日期格式将其写入mySQL。我对这些LS函数的处理经验不足。

    第二种选择,使用您提供的正则表达式来确保输入具有正确的结构,然后使用createDate使用已解析的mm dd和yyyy元素以美国格式创建日期。使用isValid验证usdate。

    这是第二种选择的盲目尝试。记住,我没有测试这段代码。我大量使用列表函数listGetAt将输入的datetime拆分为单独的日期和时间字符串,然后使用listGetAt解析出各个日期部分。
    <cfscript>
    isosampledate = "2013-06-05 14:07:33";
    passesValidation = false;
    expectedDatePattern = "\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}";
    try {
    if (refind(expectedDatePattern,isosampledate)) {
    datePortion = listGetAt(isosampledate,1," ");
    timePortion = listGetAt(isosampledate,2," ");

    yearPart = listGetAt(datePortion,1,"-");
    monthPart = listGetAt(datePortion,2,"-");
    dayPart = listGetAt(datePortion,3,"-");

    hoursPart = listGetAt(timePortion,1,":");
    minutesPart = listGetAt(timePortion,2,":");
    secondsPart = listGetAt(timePortion,3,":");

    thisUSDate = createDateTime(yearPart,monthPart,dayPart,hoursPart,minutesPart,secondsPart)

    if (isValid("usdate",thisUSDate) {
    passesValidation = true;
    sqlDate = CreateODBCDateTime(thisUSDate);
    }
    }
    } catch (e:any) {
    passesValidation = false;
    }
    </cfscript>

    我非常确定,如果输入的值不是有效日期,则这些日期函数中的至少一个将引发异常,该异常将被catch块拾取。

    希望这可以帮助。我要睡了。

    关于coldfusion - Coldfusion 8对特定错误做出响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952144/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com