无法将 createdAt 和 updatedAt 保存为日期时间值,也无法将后端保存为前端
Posted
技术标签:
【中文标题】无法将 createdAt 和 updatedAt 保存为日期时间值,也无法将后端保存为前端【英文标题】:Can't save createdAt and updatedAt as datetime values nor backend neither frontend 【发布时间】:2020-05-06 02:11:48 【问题描述】:我正在尝试将日期时间值保存在 TodoForm 中,但这些值并未反映在数据库中。这是我的待办事项模型。
Todo.js
const mongoose = require('mongoose');
const Schema = mongoose;
const todoSchema = new Schema(
name: String,
description: String,
isDone: Boolean,
createdAt: Date,
updatedAt: Date
,
timestamps: createdAt: 'created_at' updatedAt: 'updated_at'
);
mongoose.model('todos', todoSchema);
然后按照我的 todosController 发布路线。
TodosController:
app.post('/api/todos', async (req, res) =>
const name, description, isDone, createdAt, updatedAt = req.body;
const todo = new Todo(
name,
description,
isDone,
createdAt,
updatedAt
);
try
let newTodo = await todo.save();
res.status(201).send(newTodo);
catch (err)
if (err.name === 'MongoError')
res.status(409).send(err.message);
res.status(500).send(err);
);
那是来自后端。接下来的代码来自前端。
TodoForm.jsx
componentWillReceiveProps = nextProps =>
// Load Contact Asynchronously
const todo = nextProps;
if (todo._id !== this.props.todo._id)
// Initialize form only once
this.props.initialize(todo);
this.isUpdating = true;
;
render()
const handleSubmit, loading = this.props;
if (loading)
return <span>Loading...</span>;
return (
<form onSubmit=handleSubmit>
<Field
name='createdAt'
component=DateTimePickerInput
dateFormat='dd-MM-yyyy'
// dateFormat='dd-MM-yyyy H:mm'
// showTimeSelect
timeFormat='HH:mm'
placeholder=' todo createdAt...'
label='CreatedAt'
/>
<Field
name='updatedAt'
component=DateTimePickerInput
dateFormat='dd-MM-yyyy'
// dateFormat='dd-MM-yyyy H:mm'
// showTimeSelect
timeFormat='HH:mm'
placeholder='todo UpdatedAt...'
label='UpdatedAt'
/>
<Link className='btn btn-light mr-2' to='/todos'>
Cancel
</Link>
<button className='btn btn-primary mr-2' type='submit'>
this.isUpdating ? 'Updating' : 'Create'
</button>
</form>
);
我希望输出,例如当我完成待办事项表单并单击提交按钮时是“2020-09-18N14:00:30”,反映数据库上的日期时间值,但实际输出是空的 createdAt 和 updatedAt 日期时间值。
怎么了?
我从 NewTodo.jsx 调用我的 api
state =
redirect: false
;
componentDidMount()
this.props.newTodo();
submit = todo =>
return this.props
.saveTodo(todo)
.then(response => this.setState( redirect: true ))
.catch(err =>
throw new SubmissionError(this.props.errors);
);
;
【问题讨论】:
请添加您的handleSubmit功能 const handleSubmit, loading = this.props; //有 显示你的句柄提交代码 我没有handleSubmit 代码。 HandleSubmit 代码是从 redux-form 导入的 你从哪里调用你的 api?? 【参考方案1】:第 1 步:将您的日期转换为架构中的字符串
架构
createdAt: String,
updatedAt: String
您可以直接存储您在发布请求中传递的数据,如果您想将其转换为所需的格式,那么
第 2 步:如果您想将日期格式化为所需格式,请使用 moment,然后安装 moment
npm install moment
const name, description, isDone, createdAt, updatedAt = req.body;
const todo = new Todo(
name,
description,
isDone,
createdAt : moment(createdAt).format('DD-MM-YYYY HH.mm') , //change it as per your requirement
updatedAt : moment(updatedAt).format('DD-MM-YYYY HH.mm') ,
);
【讨论】:
我也有同样的问题。 钢有什么问题请告诉我以上是关于无法将 createdAt 和 updatedAt 保存为日期时间值,也无法将后端保存为前端的主要内容,如果未能解决你的问题,请参考以下文章
防止在对象集包含时覆盖 Cloud Function 中的 createdAt 和 updatedAt
ef6 中的自动 CreatedAt 和 UpdatedAt 字段 OnModelCreating()
Loopback-4 通过模型添加时间戳 createdAt 和 updatedAt
Nexus Prisma - 如何在全球范围内使用 crud 处理 createdAt 和 updatedAt?