使用 ExpressJS 在 post 路由中使用正文参数
Using body parameters in a post Route with ExpressJS
我在 NodeJS 运行时后端上使用 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 等。
我假设您没有使用任何前端框架或库。在这种情况下,我建议您将每个步骤的数据存储在浏览器的 session storage 中,然后在整个表单完成后向服务器发出单个 post 请求
我在 NodeJS 运行时后端上使用 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 等。
我假设您没有使用任何前端框架或库。在这种情况下,我建议您将每个步骤的数据存储在浏览器的 session storage 中,然后在整个表单完成后向服务器发出单个 post 请求