当参数中的日期值最终无效时,我正在尝试对我的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比较陌生。关于为什么不能识别空值的任何想法?
答案 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 truthy
和unix
是否为有效时间戳记
希望这会有所帮助