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

时间:2017-03-07 21:29:48

标签: 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': 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});
      }
    }
  });

例如,如果我输入网址“localhost:3000/2015年1月10日”,则API按预期工作,我得到:

{
  "unix": 1421712000,
  "natural": "January 20, 2015"
}

问题是我在控制台中得到了这个:

  

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

     

isoTimeDate:2015-01-20T00:00:00.000Z

     

timeDate:无效日期

     

RangeError:时间值无效

     

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

     

在Layer.handle [as handle_request](/app/node_modules/express/lib/router/layer.js:95:5)

     

下一步(/app/node_modules/express/lib/router/route.js:137:13)

     

在Route.dispatch(/app/node_modules/express/lib/router/route.js:112:3)

     

在Layer.handle [as handle_request](/app/node_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_params(/app/node_modules/express/lib/router/index.js:410:3)

     

下一步(/app/node_modules/express/lib/router/index.js:275:10)

前两行很有意义,因为我有两个console.log行代码。奇怪的是,在这种情况发生后,变量timeDate再次以无效的日期值记录到控制台,并导致错误消息。第19行提到let isoTimeDate = timeDate.toISOString();有谁知道这里发生了什么?

1 个答案:

答案 0 :(得分:0)

我明白了。事实证明,第二个favicon.ico请求正在制作中并且导致错误显然是' favicon.ico'不是有效的时间价值