使用ExpressJS在post-Route中使用body参数



我在NodeJS Runtime后端使用ExpressJS/MongoDB,我似乎不知道如何将之前填写的表单信息发送到下一页,以便在表单的后续步骤中使用。这是一个多页表单。例如,假设我正在创建一个试用版,然后我输入基本信息,比如试用名称,这样它就会把它放进MongoDB中,然后我进入下一页。然后,我想创建与我刚刚在填写表格的步骤1中创建的试验的mongoDB对象_id相关联的主题。我似乎无法将这些数据转移到应用程序的下一页,用于每个主题的文档创建。我是NodeJS的新手,任何方向都会很有帮助。

这是我在trials.js路由文件上的新试用页的代码:

const express = require('express')
const router = express.Router()
const patient = require('../models/patients.js')
const trial = require('../models/trials.js')

//Create Trial Route
router.post('/', async (req, res) => {
const trial = new Trial({
name: req.body.name,
sponsor: req.body.sponsor,
subjects: req.body.subjects,
visits: req.body.visits,
notes: req.body.notes,
status: "Open"

})
try {
const newTrial = await trial.save()
res.render('subjects/new', {
trialName: req.body.name,
SubjectNum: req.body.subjects
})
} catch {
res.render('trials/new', {
trial: trial,
errorMessage: "You must fill out all required form fields."
})
}
})

这里是patients.js路由文件上的主题创建页面:

//Create Subject Route
router.post('/', async (req, res) => {
let existingTrial = await trial.findOne({name: req.body.trialName}).exec()
console.log(existingTrial._id)
const subjects = new subject({
subject_num: req.body.subjectNum,
subject_name: [{
firstname: req.body.firstname,
lastname: req.body.lastname
}],
subject_address: [{
street: req.body.street,
city: req.body.city,
zipcode: req.body.zipcode,
state: req.body.state
}],
notes: req.body.notes,
trial: existingTrial._id
})
try {
const newSubject = await subjects.save()
res.render('subjects/new')
} catch {
res.render('subjects/new', {
errorMessage: ""
})
}
})

请记住,我可以很好地遍历这些页面,但我的mongoDB患者对象不会保存,因为它看不到我交给视图渲染的subjectNum和trialName变量。我知道视图和路由是两回事,我只是不确定如何让我的POST路由知道这些变量是什么,这样它就可以使用它们来查询数据库中的试用id等等。

我假设您没有使用任何前端框架或库。在这种情况下,我建议您将每个步骤的数据存储在浏览器的会话存储中,然后在整个表单完成后向服务器发出一个单独的post请求

最新更新