我是Mongoose和NodeJS的新手,我正在构建一个票务管理系统,登录用户可以填写表单来创建票务。它有两个字段(标题和描述),但当提交它时,我还想添加一些用户的数据到表单数据对象。
在前端,我使用React和Formik来处理表单。我的用户数据对象使用JWT存储在本地存储中。
以下是我当前的票务模型和用户模型:
//ticket.model.js
module.exports = (mongoose) => {
const Ticket = mongoose.model(
'ticket',
mongoose.Schema(
{
title: String,
description: String,
},
{ timestamps: true }
)
);
return Ticket;
};
//user.model.js
const User = mongoose.model(
'User',
new mongoose.Schema({
firstName: String,
lastName: String,
email: String,
password: String,
roles: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Role',
},
],
})
);
module.exports = User;
Formik函数:
const formik = useFormik({
initialValues: {
title: '',
description: '',
},
validationSchema,
validateOnBlur: false,
validateOnChange: false,
onSubmit: (data) => {
TicketService.create(data).then(() => {
navigate('/home');
window.location.reload();
});
},
});
理想情况下,当票被创建时,我想用用户的ObjectId查询Mongoose来检索他的firstName和lastName。如果它太复杂,我不介意只是使用JSON.parse(localStorage.getItem('user'))将用户的名称添加到表单数据。或者如果你有更好的做法,请告诉我。
谢谢!
没关系,我的formik
对象实际上缺少user元素(见下文)。
const formik = useFormik({
initialValues: {
title: '',
description: '',
authorId: JSON.parse(localStorage.getItem('user')).id,
authorName: `${JSON.parse(localStorage.getItem('user')).firstName} ${
JSON.parse(localStorage.getItem('user')).lastName
}`,
},
validationSchema,
validateOnBlur: false,
validateOnChange: false,
onSubmit: (data) => {
console.log(data);
TicketService.create(data).then(() => {
navigate('/home');
window.location.reload();
});
},
});
从那里我只是更新了我的模型和控制器相应:
module.exports = (mongoose) => {
const Ticket = mongoose.model(
'ticket',
mongoose.Schema(
{
title: String,
description: String,
authorId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
},
authorName: String,
},
{ timestamps: true }
)
);
return Ticket;
};