express.js路由无法识别条件响应的空值

时间:2019-01-01 18:18:29

标签: node.js express ecmascript-6

当参数中的日期值最终无效时,我正在尝试对我的express.js路由提供替代响应。当我看到一个无效的日期时,该值最终为null,因此在中间件的if语句中,我测试了一个真实值,如果它不是真实值,则提供替代响应。

即使日期的值为空,我得到的还是真实值。这是一个示例:

api / timestamp / hello是我的路线。

有效日期应如下所示:{"unix":1546214400000,"utc":"Mon, 31 Dec 2018 00:00:00 GMT"}

像“ hello”这样的无效日期应如下所示:{'error': 'Invalid Date'}

如果日期有效,代码将返回正确的值,但是如果日期无效,我将得到{"unix":null,"utc":"Invalid Date"}而不是{'error': 'Invalid Date'}

下面是代码。

   app.get('/api/timestamp/:date', (req,res) => {
    let date = new Date(req.params.date);

    if (date === null) {        
        res.send({'error': 'Invalid Date'});             
    } else {
       let unix = date.getTime();  
       let utc = date.toUTCString();
       res.send({unix, utc});  
    }  
});

在这个问题上,我和Node.js比较陌生。关于为什么不能识别空值的任何想法?

3 个答案:

答案 0 :(得分:2)

问:在您尝试将其转换为Unix和UTC之前,先检查有效日期 有意义吗?

UPDATE pen SET  
    PEN_STATUS = @PenStat,
    PEN_STATUS_CHANGE_REASON = CONCAT(
        COALESCE(PEN_STATUS_CHANGE_REASON, ''),
        '\n', 
        ChangeDate,
        ':',
        EmployeeID,
        ':',
        ChangeReason
    )
WHERE PEN_ID = PenID;

答案 1 :(得分:0)

节点构建响应的方式认为它是destructuring assignment,因此您会得到奇怪的响应。

要获得您想要的东西,您可以做这样的事情:

app.get('/api/timestamp/:date?', (req,res) => {
  if(req.params.date){
    let date = new Date(req.params.date);
    let unix = date.getTime();  
    let utc = date.toUTCString();
    if(unix) return res.send({unix,utc})
    res.send({'error': 'Invalid Date'});
  } else 
    res.send({'error': 'Invalid Date'});
})

答案 2 :(得分:0)

如果该参数为null并且我认为在任何情况下它都将返回null,则日期构造函数会将日期返回到1970年1月1日。

这意味着由于您使用的是严格的相等性,因此您的第一次检查始终为假。

可能最好检查req.params.date is truthyunix是否为有效时间戳记

希望这会有所帮助