Javascript 带有错误消息的奇怪行为';RangeError:无效的时间值';

Javascript 带有错误消息的奇怪行为';RangeError:无效的时间值';,javascript,node.js,date,express,Javascript,Node.js,Date,Express,我正在用Express编写一个简单的时间戳API。基本上,当用户以“正常”格式键入日期时,会显示unix格式和正常格式的json对象。以下是我代码的相关部分: timeRouter.route('/:time') .get((req, res, next) => { let time = req.params.time; let unixTime = Number(time); if (unixTime) { res.json({'unix': u

我正在用Express编写一个简单的时间戳API。基本上,当用户以“正常”格式键入日期时,会显示unix格式和正常格式的json对象。以下是我代码的相关部分:

timeRouter.route('/:time')
  .get((req, res, next) => {
    let time = req.params.time;
    let unixTime = Number(time);

    if (unixTime) {
      res.json({'unix': unixTime, 'natural': moment.unix(unixTime).format('MMMM D, YYYY')});
    } else {
      let timeDate = new Date(time);
      console.log(`timeDate: ${timeDate}`);
      let isoTimeDate = timeDate.toISOString();
      console.log(`isoTimeDate: ${isoTimeDate}`);
      if (moment(isoTimeDate).isValid()){
        res.json({'unix': Number(moment(isoTimeDate).format('X')), 'natural': moment(isoTimeDate).format('MMMM D, YYYY')});
      } else {
        res.json({'unix': null, 'natural': null});
      }
    }
  });
例如,如果我输入URL“localhost:3000/2015年1月10日”,API将按预期工作,我得到:

{
  "unix": 1421712000,
  "natural": "January 20, 2015"
}
问题是我在控制台中得到了这样的结果:

时间日期:2015年1月20日星期二00:00:00 GMT+0000(UTC)

等时日期:2015-01-20T00:00:00.000Z

timeDate:无效日期

RangeError:无效的时间值

at/app/routes/timeRouter.js:19:34

在Layer.handle[作为handle\u请求](/app/node\u modules/express/lib/router/Layer.js:95:5)

下一步(/app/node\u modules/express/lib/router/route.js:137:13)

在Route.dispatch(/app/node\u modules/express/lib/router/Route.js:112:3)

在Layer.handle[作为handle\u请求](/app/node\u modules/express/lib/router/Layer.js:95:5)

at/app/node_modules/express/lib/router/index.js:281:22

at param(/app/node_modules/express/lib/router/index.js:354:14)

at param(/app/node_modules/express/lib/router/index.js:365:14)

位于Function.process_参数(/app/node_modules/express/lib/router/index.js:410:3)

下一步(/app/node\u modules/express/lib/router/index.js:275:10)


前两行非常有意义,因为我有两行console.log代码。奇怪的是,在这种情况发生之后,变量
timeDate
再次被记录到控制台中,并且带有无效的日期值,并导致错误消息。第19行引用
let isoTimeDate=timeDate.toISOString()我知道了。事实证明,第二个favicon.ico请求正在发出,这导致了错误,因为“favicon.ico”显然不是有效的时间值

在app/routes/timeRouter.js中指出哪一行是第19行可能会有帮助。此外,在调用
新日期(时间)之前,您应该记录
时间的值
以查看传递给
日期
构造函数的确切内容。@msdex感谢我进行了编辑,以包含第19行是哪一行的信息