如何检查变量是否是NodeJS中的时刻对象

时间:2016-05-11 12:39:34

标签: node.js error-handling momentjs

我有一个简单的场景,我想测试我是发送字符串,数字还是布尔值而不是片刻对象,然后相应地继续。
根据文档,有一个名为isMoment()的函数,它将告诉元素是否是一个时刻对象。现在这在我使用JSfiddle测试的浏览器中工作正常。 但是同样的版本2.13.0在NodeJS中不起作用 此行console.log(moment.isMoment("String"));在浏览器中输出false但在NodeJS输出中

Deprecation warning: moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.
Arguments: [object Object]
Error
    at Function.createFromInputFallback (/home/oroborus/vehico-api-business/node_modules/moment/moment.js:271:105)

并执行停止。我该如何前往? 我读了这个问题。他们所说的是正确的,你不能可靠地将日期字符串转换为时刻,因此弃用警告但是如何测试我发送的是否是片刻对象然后如果没有正确的消息则不返回。

这是代码

 if (req.body.startDate === "" || req.body.endDate === "" || req.body.driverId === "") {
        res.status(400).send(JSON.stringify({
            message: "Empty strings not allowed"
        }));

    } else if (req.body.startDate === null || req.body.endDate === null || req.body.driverId === null) {
        res.status(400).send(JSON.stringify({
            message: "Null values are not allowed"
        }));
    } else if (moment.isMoment(req.body.startDate) || moment.isMoment(req.body.endDate)) {
        console.log("This is not working :( );
        res.status(400).send(JSON.stringify({
            message: "Only moment objects are allowed"
        }));
    } else {

      //The rest of the procedure
    }

3 个答案:

答案 0 :(得分:1)

它与时刻无关,你的最后状况并不好。时刻就像它应该失败一样,因为当输入日期不是时刻对象时执行else分支。

if (req.body.startDate === "" || req.body.endDate === "" || req.body.driverId === "") {
    res.status(400).send(JSON.stringify({
        message: "Empty strings not allowed"
    }));
} else if (req.body.startDate === null || req.body.endDate === null || req.body.driverId === null) {
    res.status(400).send(JSON.stringify({
        message: "Null values are not allowed"
    }));
// ------------ you forgot ! here
} else if (!moment.isMoment(req.body.startDate) || !moment.isMoment(req.body.endDate)) {
    console.log("This is not working :( )";
    res.status(400).send(JSON.stringify({
        message: "Only moment objects are allowed"
    }));
} else {
    //The rest of the procedure
}

答案 1 :(得分:0)

我在彻底阅读文档时发现的答案之一(对不起,我很糟糕,我之前没有做过)。有一行here表示

  

如果字符串与上述任何格式都不匹配且无法使用   用Date.parse解析,时刻#isValid将返回false。

moment("not a real date").isValid();

在节点中打印警告后返回false

答案 2 :(得分:-1)

阅读代码

function isMoment (obj) {
    return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
}