首页 > 解决方案 > 从用户输入发送 JSON 对象中的日期

问题描述

我有一个带有 Nodejs/Express 的 API,它从带有日期选项的表单接收输入作为请求正文。

我目前正在发送这种格式的日期YYYY-mm-dd,并且也尝试过这种格式,dd/mm/YYYY但是当我在 Postman 中测试时服务器崩溃并出现以下错误:

UnhandledPromiseRejectionWarning: ValidationError: profile validation failed: experience.0.from: Cast to Date failed for value "2017-14-09" at path
"from"
at new ValidationError (D:\ReactDev\MERN Dev\DevConnect\dev-connect\node_modules\mongoose\lib\error\validation.js:30:11)
at model.Document.invalidate (D:\ReactDev\MERN Dev\DevConnect\dev-connect\node_modules\mongoose\lib\document.js:1957:32)
at EmbeddedDocument.invalidate (D:\ReactDev\MERN Dev\DevConnect\dev-connect\node_modules\mongoose\lib\types\embedded.js:287:19)

理想情况下,用户可以输入他们想要的任何格式的日期,但我如何才能正确接收输入。有没有合适的方法来做到这一点?谢谢。

标签: javascriptjsondateexpress

解决方案


好的,不确定你的后端 NodeJS/Express 代码是什么,但假设你有一个这样的 POST 路由,它接收一个日期:

app.post('/', function (req, res) {

  //extract the user submitted date from the request body
  var rawdate = req.body.date

  //create a new Date object
  var date = new Date(rawdate)

  //check that the date object is valid (here a helpful link: https://stackoverflow.com/questions/1353684/detecting-an-invalid-date-date-instance-in-javascript)
  //if the date is valid, do your processing then send a response
  //if the date is not valid, send an error http response back to the user

  ...

})

所以基本上通过将它传递给Date()您将任何日期字符串转换为 Date 对象,您可以根据需要进行操作。这里是对文档的引用:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

我尝试使用您的两种格式向您展示一个示例: 终端屏幕截图

希望能帮助到你!


推荐阅读