gpt4 book ai didi

javascript - res.json 返回无意修改的输入

转载 作者:太空宇宙 更新时间:2023-11-04 00:29:10 24 4
gpt4 key购买 nike

我的 res.json 函数似乎正在修改我的数据。如果我在函数中记录数据,它会返回正确的数据。只有在 res.json 内部,我的数据才会发生变化,但我不明白为什么。

例如。它不返回 {"unix":"1484600306","naturalFormat":"2017-01-16"} 它返回 {"unix":"1484600306","naturalFormat":"\"2017-01-16\""}.

功能:

function unixToDate(timestamp) {
var a = new Date(timestamp * 1000);
//console.log(a);
var rgx = /T(\d{2}):(\d{2}):(\d{2}).(\d{3})Z/;
var newA = JSON.stringify(a);
//console.log(newA.replace(rgx, ""));
return newA.replace(rgx, "");
}

路线

router.get('/:unix', function(req, res) {
var timestamp = req.params.unix;
var regex = new RegExp("\\d{10}");
if (regex.test(timestamp)) {
var date = unixToDate(timestamp);
console.log(date);
res.json({ unix : timestamp, naturalFormat : date });
} else {
res.json({ unix: null, naturalFormat : null});
}
});

我还是个正则表达式新手,如果我不得不猜测它与此有关。

PS 我没有使用 toString() 因为我的日期是错误的,即 11/30/2015 而不是 12/01/2015 所以这就是为什么我用正则表达式这样做。

谢谢!

最佳答案

问题出在 unixToDate 中:

var newA = JSON.stringify(a);

您将日期序列化为 JSON,这意味着 newA 将是如下字符串:"2017-01-16T00:00:000.000Z"包括引号。然后,当您调用 res.json 时,它会再次序列化该字符串、引号等。

最简单的修复方法是使用 Date.prototype.toISOString反而。它将返回与上面相同的字符串,不带引号:

var newA = a.toISOString();

事实上,您使用 String.prototype.replace 删除日期时间部分的方法有点复杂。 ISO 8601 日期的每个位置始终具有相同的位数,那么为什么不直接使用 String.prototype.slice 呢?

function unixToDate(timestamp) {
var date = new Date(timestamp * 1000);
return date.toISOString().slice(0, 10);
}

关于javascript - res.json 返回无意修改的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41684884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com