【问题标题】:Return 400 to client when the client pass deprecating date format to Moment?当客户端将不推荐使用的日期格式传递给 Moment 时向客户端返回 400?
【发布时间】:2017-03-20 11:13:12
【问题描述】:

当客户将不推荐使用的日期格式传递给我时

我正在运行一个节点,客户端可以在其中将日期发布到 API。当他们将不推荐使用的时间格式传递给我的 Moment 解析器时,我想可能会向客户端返回 400。我不确定这是否是推荐的方法,并希望您对此发表看法。在我的特殊情况下,它不应该造成太多问题,因为它只会影响我的团队。

如果我决定在将此类已弃用的日期格式传递给我的 API 时返回 400,我需要一种检测这些事件的方法。截至目前,我在服务器日志中收到不推荐使用的警告,但还没有找到解决此问题的方法。我试过了,但由于 Moment 似乎没有引发真正的错误(即使从日志中看起来确实如此),它没有检测到弃用的日期:

try {
  my_date = Moment(request.body.date)
}
catch (err) {
  console.log("ERROR");
}

这只会捕获真正的错误,而不是已弃用的警告。

有谁知道如何在代码中捕捉 Moment 已弃用的警告?

【问题讨论】:

    标签: node.js momentjs


    【解决方案1】:

    要根据您当前支持的格式查看日期是否有效,请使用以下内容:

    var formats = [
        moment.ISO_8601,
        "MM/DD/YYYY HH:mm:ss",
        // some other formats that you need ...
    ];
    if (!moment(request.body.date, formats, true).isValid()) {
        return res.status(400).send('Invalid date format');
    }
    // handle request
    

    始终使用true 作为moment() 的第三个参数以进行严格验证。否则它也会尝试匹配无效的日期。

    并始终提供您想要使用的受支持格式的明确列表,否则您将无法确定哪些匹配哪些不匹配,尤其是在 Moment 的未来版本中可能会发生变化。

    查看此答案了解更多信息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多