首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Node、express和mongoDB开发多页注册表所面临的问题

使用Node、express和mongoDB开发多页注册表所面临的问题
EN

Stack Overflow用户
提问于 2021-02-17 18:52:16
回答 2查看 36关注 0票数 0

我正在开发一个3页的注册表,并使用mongodb存储数据。但由于有多个页面,我在所有3个页面的所有post请求之外创建了集合"detail“。但现在它总是只存储一个数据。它只显示一个用户的最新详细信息。请告诉我存储每个用户详细信息的方法。我知道我必须让所有字段都等于NULL,但是当我在最后一次这样做时(首先保存,然后使字段等于null),那么在我的数据库中,我只得到了NULL值。请帮帮我。

代码语言:javascript
复制
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");
});
EN

回答 2

Stack Overflow用户

发布于 2021-02-17 19:34:46

这里的方法是非常错误的,

  1. detail正在成为一个全局对象。任何请求的更新都将以不明确的顺序保存。必须保存保存在FORM_1的POST请求中的
  2. 详细信息,并且必须将其documentId _id返回到表单,以便后续请求FORM_2FORM_3进行更新而不保存。
  3. 如果您使用null更新任何字段,它实际上将保存为null,而不是不更新。

Suggestions:

在FORM_1中

代码语言:javascript
复制
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中

代码语言:javascript
复制
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中

代码语言:javascript
复制
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();
});
票数 1
EN

Stack Overflow用户

发布于 2021-02-17 19:02:37

必须在FORM_1的POST请求中初始化详细信息

然后使用detail.save()立即发送到数据库;

然后,您必须获取上面创建的文档的id,并将其传递给FORM_2,并在下一个FORM_2的post请求中对该对象执行更新操作

对于FORM_3也是如此

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66240456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档