我正在开发一个3页的注册表,并使用mongodb存储数据。但由于有多个页面,我在所有3个页面的所有post请求之外创建了集合"detail“。但现在它总是只存储一个数据。它只显示一个用户的最新详细信息。请告诉我存储每个用户详细信息的方法。我知道我必须让所有字段都等于NULL,但是当我在最后一次这样做时(首先保存,然后使字段等于null),那么在我的数据库中,我只得到了NULL值。请帮帮我。
const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const app = express( );
app.use(bodyParser.urlencoded({extended:true}));
mongoose.connect("mongodb://localhost:27017/detailsdb", {useNewUrlParser: true, useUnifiedTopology: true});
mongoose.set('useFindAndModify', false);
const detailsSchema = {
Name: String,
Divorce_id: String,
Date_of_Birth: String,
Nationality: String,
Marital_Status: String,
Highest_Education: String
};
const Detail = mongoose.model("Detail", detailsSchema);
const detail = new Detail({
Name: null,
Divorce_id: null,
Date_of_Birth: null,
Nationality: null,
Marital_Status: null,
Highest_Education: null
});
app.get("/FORM-1",function(req,res)
{
res.sendFile(__dirname+"/form1.html");
});
app.get("/FORM-2",function(req,res)
{
res.sendFile(__dirname+"/form2.html");
});
app.get("/FORM-3",function(req,res)
{
res.sendFile(__dirname+"/form3.html");
});
app.post("/FORM-1", function(req, res){
detail.Name = req.body.name;
detail.Divorce_id = req.body.id;
res.redirect("/FORM-2");
});
app.post("/FORM-2", function(req, res){
detail.Date_of_Birth = req.body.dob;
detail.Nationality = req.body.nationality;
res.redirect("/FORM-3");
});
app.post("/FORM-3", function(req, res){
detail.Marital_Status= req.body.marital_status;
detail.Highest_Education= req.body.highest_education;
detail.save();
});
app.listen(3000, function(){
console.log("server started on port 3000");
});发布于 2021-02-17 19:34:46
这里的方法是非常错误的,
detail正在成为一个全局对象。任何请求的更新都将以不明确的顺序保存。必须保存保存在FORM_1的POST请求中的_id返回到表单,以便后续请求FORM_2和FORM_3进行更新而不保存。null更新任何字段,它实际上将保存为null,而不是不更新。Suggestions:
在FORM_1中
app.post("/FORM-1", function(req, res){
let detail = new Detail({
Name: req.body.name,
Divorce_id: req.body.id;,
Date_of_Birth: null,
Nationality: null,
Marital_Status: null,
Highest_Education: null
});
detail.save(function(err,savedDetail){
if(!err)
res.json({savedDetail});
})
//res.redirect("/FORM-2");
});在FORM_2中
app.post("/FORM-2", function(req, res){
let updateDetails = {
Date_of_Birth : req.body.dob,
Nationality : req.body.nationality
};
Detail.findOneAndUpdate({
_id : req.body._id
},{
$set : updateDetails
},function(err,data){
if(!err){
res.redirect("/Form-3");
}
});
//detail.Date_of_Birth = req.body.dob;
//detail.Nationality = req.body.nationality;
//res.redirect("/FORM-3");
});在Form_3中
app.post("/FORM-3", function(req, res){
let updateDetails = {
Marital_Status : req.body.marital_status,
Highest_Education : req.body.highest_education
};
//detail.Marital_Status= req.body.marital_status;
//detail.Highest_Education= req.body.highest_education;
Detail.findOneAndUpdate({
_id : req.body._id
},{
$set : updateDetails
},function(err,data){
if(!err){
res.json({updated : true});
}
});
//detail.save();
});发布于 2021-02-17 19:02:37
必须在FORM_1的POST请求中初始化详细信息
然后使用detail.save()立即发送到数据库;
然后,您必须获取上面创建的文档的id,并将其传递给FORM_2,并在下一个FORM_2的post请求中对该对象执行更新操作
对于FORM_3也是如此
https://stackoverflow.com/questions/66240456
复制相似问题