node-express 如何在 URL 查询字符串中传递 DATE 参数以及如何解析它

Posted

技术标签:

【中文标题】node-express 如何在 URL 查询字符串中传递 DATE 参数以及如何解析它【英文标题】:node-express how to pass DATE params in URL query string and how to parse that 【发布时间】:2018-04-06 04:59:57 【问题描述】:

我有一个基于 Angular 2 构建的应用程序,该服务发送 http 请求以从 oracle DB、usind node-oracle db 和 express 框架中获取数据。 我已经使用 express 构建了 rest api,现在我需要在请求参数中传递 DATE,并且 express 必须解析它并发送响应。如何在查询参数中传递 DATE 以及如何在 express rest api 中解析它。

【问题讨论】:

【参考方案1】:

日期是仅有的一种在您对对象进行字符串化时不会存储的 javascript 类型。

您可以查看Issues with Date() when using JSON.stringify() and JSON.parse() 了解更多信息。

您的选择是:

在输入时分割日期

如果你只是在寻找一个日期,你可以把它分成 3 个参数

var valueToSend = 
  date: 
    day: date.getDate(),
    month: date.getMonth(),
    year: date.getYear()

然后在快递方面

new Date(req.body.year, req.body.month, req.body.date)

这种方法的优点是易于验证,您只需发送所需的信息。缺点是代码比较多

在快递方面使用正则表达式

您可以制作一个中间件来测试日期格式的字符串,并使用 JSON.parse reviver 函数作为第二个参数将其转换为日期https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

例如

 module.exports = (req, res, next) => 
     for (var bodyKey in req.body) 
         if (req.body.hasOwnProperty(bodyKey)) 
             req.body[bodyKey] = JSON.parse(req.body[bodyKey],dateTimeReviver);
         
     
     next();
 ;

function dateTimeReviver(key, value) 
  var a;
    if (typeof value === 'string') 
        a = /[0-9]4-[0-9]2-[0-9]2T[0-9]2:[0-9]2:[0-9]2.[0-9]3Z/.exec(value);
        if (a) 
            return new Date(a[0]);
        
    
    return value;

【讨论】:

我必须同时发送日期和时间 那么选项 2 会更好,但你可以发送 ` date: day: date.getDate(), month: date.getMonth(), year: date.getYear() 跨度> 那么第二个选项可能会更好。只需要换快递面【参考方案2】:

我写了一个series on dates,其中涵盖了它们在客户端、中间层和 Oracle 数据库之间移动时发生的情况。这是part that touches on node-oracledb。您可能会发现其中一些信息很有用。

Peter 的回答已经涵盖了从来自客户端的 ISO 8601 字符串在字符串化后解析日期。我将补充一点,如果日期被插入到 DATE 或 TIMESTAMP 列中,则在连接到 Oracle 时要确保正确的时区。 The doc 也涵盖了这一点。

【讨论】:

【参考方案3】:

使用 iso 格式 'yyyy-mm-dd' 传递日期

const date = new Date();
http.get(`url/test?date=$date.toISOString()`

在快递方面

app.get(/test', async function(req, res) 

const dateInServer = newDate(req.query.date);

);

【讨论】:

使用 new Date(req.query.date) 而不是 newDate()。否则这很好。

以上是关于node-express 如何在 URL 查询字符串中传递 DATE 参数以及如何解析它的主要内容,如果未能解决你的问题,请参考以下文章

如何正确关闭 node-express 服务器?

如何在 Node-Express / Vue Web 应用程序中管理 OAuth?

如何检查 url 是不是在 jQuery 中没有查询字符串?

如何在 URL 查询字符串中存储程序状态?

PHP如何在页面加载之前将查询字符串附加到URL

如何在 FeignClient 中使用多个查询字符串参数调用 url?