【发布时间】:2022-01-25 17:41:57
【问题描述】:
我已经构建了一个锻炼跟踪器应用程序,它允许您创建一个会话并在该会话中进行多个动作。我将我的应用程序连接到了一个 airtable API,并且刚刚开始学习 mongoDB 并已过渡到该数据库。目前我可以发送一个会话,但它只记录一个动作,而不是所有发送的动作。
下面是我的会话表单的动态代码。
const [formData, setFormData] = useState([
{
movement: '',
weight: '',
rpe: '',
reps: '',
sets: '',
notes: '',
session: [
""
]
}
])
const handleChange = (e, index) => {
const { name, value } = e.target;
const form = [...formData];
form[index][name] = value;
form[index].session[0] = sessionId;
setFormData(form);
};
const handleAddInput = () => {
setFormData([...formData,
{
movement: '',
weight: '',
rpe: '',
reps: '',
sets: '',
notes: '',
session: [
''
]
}
]);
};
映射状态并在我的 API 调用中包含我的身体数据中的运动,我能够将数据获取到我的数据库,但它只发送一个。我明白为什么它只发送一个。我只是想不出任何其他方式将数据包含在 API 调用的正文中。我已经搜刮了谷歌并找不到任何东西。
下面是我的表单的 HandleSubmit,包括 API 调用。
const handleSessionSubmit = async (e) => {
e.preventDefault()
formData.forEach(async movement => {
const sessionData = {
sessionName,
date,
movements: [{ ...movement }]
}
const sessionPost = await api.post('/sessions', sessionData )
console.log(sessionPost);
})
props.setToggle(prevToggle => !prevToggle)
navigate('/')
// }
}
下面是数据库架构
import mongoose from 'mongoose'
const Schema = mongoose.Schema
const Movements = new Schema(
{
movement: { type: String },
weight: { type: String },
reps: { type: String },
rpe: { type: String },
sets: { type: String },
notes: { type: String },
}
)
const Session = new Schema(
{
sessionName: { type: String },
date: { type: String },
movements: [ Movements ]
},
{ timestamps: true}
)
export default mongoose.model('sessions', Session)
如果你想看看它是如何工作的,下面是网站 URL 网址:https://pain-workout.netlify.app/
提前致谢!
【问题讨论】:
标签: node.js reactjs mongodb relational-database