简体   繁体   English

如何在使用 NodeJS、Express 和 mongodb 将其更新为新数据之前检索旧表单数据! ejs是模板吗?

[英]How to retrieve older form data before updating it to new one using NodeJS, Express and mongodb! Ejs is the template?

I need to retrieve all older data of a form, before updating it to new one.我需要检索表单的所有旧数据,然后再将其更新为新数据。 I need those form data for a reporting purpose.我需要这些表单数据用于报告目的。 It basically will be the version of a data.它基本上是数据的版本。

I am working on #Nodejs #ExpressJS #EJS as template and #MONGODB,#mongoose.我正在使用#Nodejs #ExpressJS #EJS 作为模板和#MONGODB,#mongoose。

Below are the images of the code!下面是代码的图片! I am new to the programming so please help me with the coding part not describe it using coding Jargans!我是编程新手,所以请帮助我解决编码部分,不要使用编码 Jargans 来描述它!

  1. Schema Snippet架构片段

 var mongoose = require('mongoose'); var bcrypt = require('bcrypt-nodejs'); // define the schema for our user model var procedureschema = mongoose.Schema({ proceduretype : String, procedurename : String, procedurenumber : String, scope : String, status:{type:String,lowercase:true,enum:["draft", "active", "pending"]}, forms : String, relatedprocedure : String, norms : String, qualityrecords : String, expdate : String, companyname : String, version : String, owner: String, approver : String, procedurefiles : String, flowchart : String, proceduredescription : String, isotags : String, departmentname : String }); // generating a password hash // create the model for users and expose it to our app module.exports = mongoose.model('Procedure', procedureschema);

  1. Form view EJS page表单视图 EJS 页面

 <% include sidebar.ejs %> <div class="dt-content"> <!-- Page Header --> <!-- <div class="dt-page__header"> <h1 class="dt-page__title">New Procedure</h1> </div> --> <!-- /page header --> <!-- Grid --> <div class="row"> <!-- Grid Item --> <div class="col-xl-12"> <!-- Card --> <div class="dt-card"> <div class="dt-card__header"> <!-- Card Heading --> <div class="dt-card__heading"> <h3 class="dt-card__title">New Procedure</h3> </div> <!-- /card heading --> <a type="button" href="/admin/add/procedure/forms" role="button" class="btn btn-dark mr-2 mb-2"> Add Forms</a> <a type="button" href="/admin/add/procedure/type" role="button" class="btn btn-dark mr-2 mb-2"> Add Procedure Type</a> <a type="button" href="/admin/add/procedure/norms" role="button" class="btn btn-dark mr-2 mb-2"> Add Norms</a> <a type="button" href="/admin/add/procedure/tags" role="button" class="btn btn-dark mr-2 mb-2"> Add Procedure Tags</a> </div> <!-- Card Header --> <!-- /card header --> <div class="dt-card__body"> <form action="/admin/create/procedure" method="post" enctype="multipart/form-data"> <div class="form-row"> <div class="col-sm-6 mb-3"> <label>Procedure Type</label> <div class="input-group"> <select class="custom-select" name="proceduretype" id="inputGroupSelect04"> <option selected>Choose Procedure Type</option> <% procedurecat.forEach(function(data){%> <option value="<%=data.category_name %>"><%=data.category_name %></option> <%})%> </select> </div> </div> <div class="col-sm-6 mb-3"> <label>Procedure Name</label> <input type="text" class="form-control" id="validationDefault03" name="procedurename" placeholder="Enter Procedure Name" required> </div> <div class="col-sm-6 mb-3"> <label>Procedure Number</label> <input type="number" class="form-control" name="procedurenumber" id="validationDefault03" placeholder="Enter Procedure Number" required> </div> <div class="col-sm-6 mb-3"> <label>Scope</label> <input type="text" class="form-control" id="validationDefault03" name="scope" placeholder="Enater Procedure Scope" required> </div> <div class="col-sm-6 mb-3"> <label>Status</label> <div class="input-group"> <select class="custom-select" name="status" id="inputGroupSelect04"> <option selected>Choose Status</option> <option value="draft">Draft</option> <option value="pending">Pending</option> <option value="active">Active</option> </select> </div> </div> <div class="col-sm-6 mb-3"> <label>Forms</label> <div class="input-group"> <select class="custom-select" name="forms" id="inputGroupSelect04"> <option selected>Choose Forms</option> <% forms.forEach(function(data){%> <option value="<%=data.forms_name %>"><%=data.forms_name %></option> <%})%> </select> </div> </div> <div class="col-sm-6 mb-3"> <label>Related Procedure</label> <div class="input-group"> <select class="custom-select" name="relatedprocedure" id="inputGroupSelect04"> <option selected>Choose Related Procedures</option> <% proceduretitle.forEach(function(data){%> <option value="<%=data.procedurename %>"><%=data.procedurename %></option> <%})%> </select> </div> </div> <div class="col-sm-6 mb-3"> <label>Select Norms</label> <div class="input-group"> <select class="custom-select" name="norms" id="inputGroupSelect04"> <option selected>Choose Norms</option> <% norms.forEach(function(data){%> <option value="<%=data.norms_name %>"><%=data.norms_name %></option> <%})%> </select> </div> </div> <div class="col-sm-6 mb-3"> <label>Quality Records</label> <input type="text" name="qualityrecords" class="form-control" id="validationDefault03" placeholder="Enter Quality Records Here" required> </div> <div class="col-sm-6 mb-3"> <label>Expiration Date</label> <div class="input-group date" id="date-time-picker-1" data-target-input="nearest"> <input type="text" name = "expdate" class="form-control datetimepicker-input" data-target="#date-time-picker-1" /> <div class="input-group-append" data-target="#date-time-picker-1" data-toggle="datetimepicker"> <div class="input-group-text"><i class="icon icon-calendar"></i></div> </div> </div> </div> <div class="col-sm-6 mb-3"> <label>Company Name</label> <input type="text" value="<%= user.companyname %>" name="companyname" class="form-control" id="validationDefault03" readonly > </div> <div class="col-sm-6 mb-3"> <label>Version</label> <input type="number" step ="0.1" name="version" class="form-control" id="validationDefault03" placeholder="Auto Increased field" required> </div> <div class="col-sm-6 mb-3"> <label>Owner</label> <div class="input-group"> <select class="custom-select" name="owner" id="inputGroupSelect04"> <option selected>Choose Owner</option> <% users.forEach(function(data){%> <option value="<%=data.name %>"><%=data.name %></option> <%})%> </select> </div> </div> <div class="col-sm-6 mb-3"> <label>Approver</label> <div class="input-group"> <select class="custom-select" name="approver" id="inputGroupSelect04"> <option selected>Choose Approver</option> <% users.forEach(function(data){%> <option value="<%=data.name %>"><%=data.name %></option> <%})%> </select> </div> </div> <div class="col-sm-6 mb-3"> <label>Departmnent Name</label> <div class="input-group"> <select class="custom-select" name="departmentname" id="inputGroupSelect04"> <option selected>Choose Department Name</option> <% department.forEach(function(data){%> <option value="<%=data.departmentname %>"><%=data.departmentname %></option> <%})%> </select> </div> </div> <div class="col-sm-12 mb-3 form-row"> <label class=" col-form-label text-sm-left" for="file-field">Attached Files</label> <div class="col-md-12 col-sm-9"> <div class="custom-file"> <input type="file" name="procedurefiles" onchange="GetFileSizeNameAndType()" id="file" class="custom-file-input" id="file-field" multiple> <label class="custom-file-label" for="file-field">Attacthed your files here ..</label> </div> </div> <div class="form-row input-group"> <div class="col-md-6 col-sm-6 form-row"> <div id="fp"></div> </div> </div> </div> <div class=" col-sm-12 mb-4 "> <label class=" text-sm-left mb-4">Flowchart</label> <button type="button" href="javascript:void(0)" role="button" class="btn btn-dark mr-2 mb-2">Design your flowchart</button> </div> <div class=" col-sm-12 mb-4 "> <label>Description</label> <textarea class=" col-sm-12 mb-4" name="proceduredescription" id="summernote"></textarea> </div> </div> <hr class="border-dashed my-8"> <div class=" form-row mb-4 "> <label class="col-md-2 col-sm-3 text-sm-right mb-4 mb-sm-0">Read Confirmation</label> <div class="col-md-10 col-sm-9"> <!-- Checkbox --> <div class="custom-control custom-checkbox custom-control-inline"> <input type="checkbox" id="customcheckboxInline1" name="customcheckboxInline1" class="custom-control-input" checked> <label class="custom-control-label" for="customcheckboxInline1"></label> </div> </div> </div> <hr class="border-dashed my-8"> <div class="form-group form-row mb-0 col-md-12"> <button type="submit" class="btn btn-primary text-uppercase">Submit this procedure</button> </div> </form> </div> <!-- Card Body --> </div> <!-- /card body --> </div> <!-- /card --> </div> <!-- /grid item --> </div> <!-- /grid --> <!-- /site content --> <% include footer.ejs %> <script> $(document).ready(function() { $('#summernote').summernote(); });</script> <script> function GetFileSizeNameAndType() { var fi = document.getElementById('file'); // GET THE FILE INPUT AS VARIABLE. var totalFileSize = 0; // VALIDATE OR CHECK IF ANY FILE IS SELECTED. if (fi.files.length > 0) { // RUN A LOOP TO CHECK EACH SELECTED FILE. for (var i = 0; i <= fi.files.length - 1; i++) { //ACCESS THE SIZE PROPERTY OF THE ITEM OBJECT IN FILES COLLECTION. IN THIS WAY ALSO GET OTHER PROPERTIES LIKE FILENAME AND FILETYPE var fsize = fi.files.item(i).size; totalFileSize = totalFileSize + fsize; document.getElementById('fp').innerHTML = document.getElementById('fp').innerHTML + '<br /> ' + 'File Name is <b>' + fi.files.item(i).name + "</b>."; } } document.getElementById('divTotalSize').innerHTML = "Total File(s) Size is <b>" + Math.round(totalFileSize / 1024) + "</b> KB"; } </script>

  1. Routes of that form Post and Update API这种形式的路由发布和更新 API

 app.post('/create/procedure', function (req, res) { let proceduresinglefiles = req.files.procedurefiles if(Array.isArray(proceduresinglefiles)==false){ console.log(Array.isArray(proceduresinglefiles)); console.log(typeof(proceduresinglefiles)); console.log(proceduresinglefiles); var filename = proceduresinglefiles.name; proceduresinglefiles.mv('./public/assets/documents/procedure/' + filename, function(err) { if (err) console.log(err); }); var procedure = Procedure(); procedure.proceduretype = req.body.proceduretype; procedure.procedurename = req.body.procedurename; procedure.procedurenumber = req.body.procedurenumber; procedure.scope = req.body.scope; procedure.status = req.body.status; procedure.forms = req.body.forms; procedure.relatedprocedure = req.body.relatedprocedure; procedure.norms = req.body.norms; procedure.qualityrecords = req.body.qualityrecords; procedure.expdate = req.body.expdate; procedure.companyname = req.body.companyname; procedure.version = req.body.version; procedure.owner = req.body.owner; procedure.approver = req.body.approver; procedure.procedurefiles = filename; procedure.flowchart = req.body.flowchart; procedure.proceduredescription = req.body.proceduredescription; procedure.isotags = req.body.isotags; procedure.departmentname = req.body.departmentname procedure.save(function (err, getprocedure) { if (err) res.json(err); else { console.log(getprocedure); res.redirect("/admin/view/procedure"); } }) } else { var filenamea=[]; for(var i=0;i<proceduresinglefiles.length;i++){ console.log(proceduresinglefiles.length); console.log(i); var procedurefilename = proceduresinglefiles[i].name; console.log(procedurefilename); filenamea[i]=procedurefilename; console.log(filenamea); proceduresinglefiles[i].mv('./public/assets/documents/procedure/' + procedurefilename, function(err) { if (err) console.log(err); }); } let multipleprocedurefilename= filenamea.toString(); var procedure = Procedure(); procedure.proceduretype = req.body.proceduretype; procedure.procedurename = req.body.procedurename; procedure.procedurenumber = req.body.procedurenumber; procedure.scope = req.body.scope; procedure.status = req.body.status; procedure.forms = req.body.forms; procedure.relatedprocedure = req.body.relatedprocedure; procedure.norms = req.body.norms; procedure.qualityrecords = req.body.qualityrecords; procedure.expdate = req.body.expdate; procedure.companyname = req.body.companyname; procedure.version = req.body.version; procedure.owner = req.body.owner; procedure.approver = req.body.approver; procedure.procedurefiles = multipleprocedurefilename; procedure.flowchart = req.body.flowchart; procedure.proceduredescription = req.body.proceduredescription; procedure.isotags = req.body.isotags; procedure.departmentname = req.body.departmentname procedure.save(function (err, getprocedure) { if (err) res.json(err); else { console.log(getprocedure); res.redirect("/admin/view/procedure"); } }) } });

 app.post('/edit/procedure/:id',(req, res) => { Procedure.findOneAndUpdate({_id:req.params.id},{ $set:{ proceduretype : req.body.proceduretype, procedurename : req.body.procedurename, procedurenumber : req.body.procedurenumber, scope : req.body.scope, status : req.body.status, forms : req.body.forms, relatedprocedure : req.body.relatedprocedure, norms : req.body.norms, qualityrecords : req.body.qualityrecords, expdate : req.body.expdate, companyname : req.body.companyname, version : req.body.version, owner : req.body.owner, approver : req.body.approver, procedurefiles : req.body.procedurefiles, flowchart : req.body.flowchart, proceduredescription : req.body.proceduredescription, isotags : req.body.isotags, departmentname : req.body.departmentname }}, {new: true, upsert:true}, function(err, procedurenew){ if(err){ console.log(err); } else { console.log(procedurenew); res.redirect('/admin/view/procedure') } } ) });

As far as I understand your problem, you need the old data before updating it to new one?据我了解您的问题,您需要在将旧数据更新为新数据之前? So you need to change(new:false) in your query API and your API code looks like:因此,您需要在查询 API 中更改 (new:false) 并且您的 API 代码如下所示:

app.post('/edit/procedure/:id',(req, res) => {
  Procedure.findOneAndUpdate({_id:req.params.id},{
    $set:{

              proceduretype : req.body.proceduretype,
              procedurename : req.body.procedurename,
              procedurenumber : req.body.procedurenumber,
              scope : req.body.scope,
              status : req.body.status,
              forms : req.body.forms,
              relatedprocedure : req.body.relatedprocedure,
              norms : req.body.norms,
              qualityrecords : req.body.qualityrecords,
              expdate : req.body.expdate,
              companyname : req.body.companyname,
              version : req.body.version,
              owner : req.body.owner,
              approver : req.body.approver,
              procedurefiles : req.body.procedurefiles,
              flowchart : req.body.flowchart,
              proceduredescription : req.body.proceduredescription,
              isotags : req.body.isotags,
              departmentname : req.body.departmentname
  }}, 
  {new: false, upsert:true},
  function(err, procedurenew){
    if(err){
      console.log(err);
    }
    else
    {
      console.log(procedurenew);
      res.redirect('/admin/view/procedure')
    }
  }
  )
});

[DO VOTE TO THIS ANSWER, IF ITS HELPFUL TO YOU] [请投票给这个答案,如果它对你有帮助]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM