Express - Mongoose -如何在提交表单时将用户数据添加到POST请求?



我是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;
};

最新更新