You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js中空日期参数返回错误JSON对象问题排查

解决FreeCodeCamp时间戳微服务空参数测试失败问题

问题现状

已通过测试项:

  • 向/api/:date?传入有效日期,返回包含unix和utc键的JSON
  • 请求/api/1451001600000返回正确时间戳
  • 可处理new Date(date_string)能解析的日期格式
  • 传入无效日期字符串时返回{ error: "Invalid Date" }

失败测试项:

  • 空日期参数(请求/api或/api/)应返回含unix键的当前时间JSON
  • 空日期参数(请求/api或/api/)应返回含utc键的当前时间JSON

问题原因

当前代码中,/api/:date路由要求必须传入date参数,当请求/api/时,req.params.date会被设为空字符串,导致解析成无效日期,触发错误返回。而单独的/api路由只处理不带斜杠的请求,没覆盖/api/的情况,两种空参数场景未完全处理。

解决方案

修改路由规则,让date参数变为可选,同时在处理逻辑中判断参数是否为空,为空时返回当前时间。

修改后的代码

// index.js
// where your node app starts

// init project
var express = require('express');
var app = express();
dotenv = require('dotenv');
dotenv.config();

// enable CORS
var cors = require('cors');
app.use(cors({ optionsSuccessStatus: 200 }));

// http://expressjs.com/en/starter/static-files.html
app.use(express.static('public'));

// http://expressjs.com/en/starter/basic-routing.html
app.get("/", function (req, res) {
  res.sendFile(__dirname + '/views/index.html');
});

const isInvalidDate = (date) => date.toUTCString() === "Invalid Date"

// 修改路由,让date参数可选
app.get("/api/:date?", function (req, res) {
  // 处理空参数情况:参数不存在或为空字符串
  if (!req.params.date) {
    const now = new Date();
    return res.json({
      unix: now.getTime(),
      utc: now.toUTCString()
    });
  }

  let date = new Date(req.params.date)

  if (isInvalidDate(date)) {
    date = new Date(+req.params.date)
  }

  if (isInvalidDate(date)) {
    res.json({ error: "Invalid Date" })
    return;
  }

  res.json({
    unix: date.getTime(),
    utc: date.toUTCString()
  });
});

// listen for requests :)
var listener = app.listen(process.env.PORT, function () {
  console.log('Your app is listening on port ' + listener.address().port);
});

修改说明

  1. 路由改为/api/:date?,问号表示date参数是可选的,这样/api和/api/都会匹配到这个路由。
  2. 在处理逻辑开头添加判断:如果req.params.date不存在或为空,直接返回当前时间的JSON。
  3. 删除原来单独的/api路由,避免路由冲突,同时简化代码结构。

这样修改后,空参数的两个测试项就能通过,同时不影响其他已通过的测试。

内容的提问来源于stack exchange,提问作者Kernel-rb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:02:45