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

时间:2017-10-25 07:45:53

标签: node.js angular express

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

3 个答案:

答案 0 :(得分: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

e.g。

 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]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z/.exec(value);
        if (a) {
            return new Date(a[0]);
        }
    }
    return value;
}

答案 1 :(得分:1)

以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);

});

答案 2 :(得分:0)

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

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