Home > Mobile >  .save() function not working to update database
.save() function not working to update database

Time:07-18

I have this working for a different Schema (I can show this code if needed) but when I tried to recreate it for another, it won't update my DB. It's connected to a MongoDB database and this functionality works with another Schema but this one does not

I've hit a dead end and have no idea a this point... Any help would be appreciated!!

Here is the POST controller

  console.log("post");
  const userId = req.body.userId;
  const updatedName = req.body.name;
  const updatedPassword = req.body.password;
  const updatedEmail = req.body.email;
  const updatedSkype = req.body.skype;
  const updatedDepartment = req.body.department;
  const updatedJobtitle = req.body.jobtitle;
  const updatedLinemanager = req.body.linemanager;
  const updatedNinumber = req.body.ninumber;
  // const updatedJoinDate = req.body.joindate;
  // console.log(req.body);

  User.findById(userId)
    .then((user) => {
      isadmin = user.isadmin;
      name = updatedName;
      password = updatedPassword;
      email = updatedEmail;
      skype = updatedSkype;
      department = updatedDepartment;
      jobtitle = updatedJobtitle;
      linemanager = updatedLinemanager;
      ninumber = updatedNinumber;
      joindate = user.joindate;
      return user.save();
    })
    .then((result) => {
      console.log("User EDITED!");
      res.redirect("/staffdir");
    })
    .catch((err) => console.log(err));
};

The User model

const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const userSchema = new Schema({
  isadmin: {
    type: Boolean,
    required: true,
  },
  name: {
    type: String,
    required: true,
  },
  password: {
    type: String,
    required: true,
  },
  email: {
    type: String,
    required: true,
  },
  skype: {
    type: String,
    required: true,
  },
  department: {
    type: String,
    required: true,
  },
  jobtitle: {
    type: String,
    required: true,
  },
  linemanager: {
    type: String,
    required: true,
  },
  ninumber: {
    type: String,
    required: true,
  },
  joindate: {
    type: Date,
    required: true,
  },
});

module.exports = mongoose.model("User", userSchema);

The Routes

router.get("/add-user", adminController.getAddUser);

router.get("/edit-user/:userId", adminController.getEditUser);

router.get("/edit-user-list", adminController.getEditUserList);

//POST USER
router.post("/add-user", adminController.postAddUser);

router.post("/edit-user/edit-user", adminController.postEditUser);
router.post("/edit-user", adminController.postEditUser);

router.post("/destroy-user", adminController.postDeleteUser);

And the HTML/EJS file

<%- include('../includes/head.ejs') %>
<link rel="stylesheet" href="/css/admin.css" />
<link rel="stylesheet" href="/css/add-user.css" />
  <body>
    <img src="pozzani.png" alt="pozzani logo"  />
    <div >
      <div >
        <%- include('../includes/signout.ejs') %>
        <%- include('../includes/nav.ejs') %>
        <%- include('../includes/useful.ejs') %>
      </div>
      <div >
        <h2 >EDIT USER</h2>
        <div >
          <h3 >Welcome to the USER edit tool</h3>
          <p >Please edit forms below to make change. <b>ALL EDITS ARE FINAL!</b></p>
          <form  action="edit-user" method="POST">
            <div >
              <label for="isadmin">Is Admin?</label>
              <select id="isadmin" name="isadmin">
                <% if (!user.isadmin) { %>
                <option value="false" selected>False</option>
                
                <option value="false">False</option>
                <option value="false">False</option>
                <option value="false">False</option>
                <option value="false">False</option>
                <option value="false">False</option>
                <option value="true">True - ARE YOU SURE? USER WILL BE ABLE TO EDIT USERS AND UPDATES</option>
                <% } else { %>
                <option value="true" selected>True - ARE YOU SURE? USER WILL BE ABLE TO EDIT USERS AND UPDATES</option>
                <% } %>
              </select>
            </div>
            <div >
              <label for="name">Name</label>
              <input type="text" name="name" id="name" value="<%= user.name %>" >
            </div>
            <div >
              <label for="password">Password</label>
              <input type="text" name="password" id="password" value="<%= user.password %>">
            </div>
            <div >
              <label for="email">Email</label>
              <input type="email" name="email" id="email" value="<%= user.email %>">
            </div>
            <div >
              <label for="skype">Skype</label>
              <input type="text" name="skype" id="skype" value="<%= user.skype %>">
            </div>
            <div >
              <label for="department">Department</label>
              <input type="text" name="department" id="department" value="<%= user.department %>">
            </div>
            <div >
              <label for="jobtitle">Job Title</label>
              <input type="text" name="jobtitle" id="jobtitle" value="<%= user.jobtitle %>">
            </div>
            <div >
              <label for="linemanager">Line Manager</label>
              <input type="text" name="linemanager" id="linemanager" value="<%= user.linemanager %>">
            </div>
            <div >
              <label for="ninumber">National Insurance Number</label>
              <input type="text" name="ninumber" id="ninumber" value="<%= user.ninumber %>">
            </div>
            <!-- <div >
              <label for="joindate">Join Date</label>
              <input type="date" name="joindate" id="joindate" value="<%= user.joindate %>">
            </div> -->
            <input type="hidden" value="<%= user._id %>" name="userId">
            <button  type="submit"><% userId = user._id %>Edit User</button>
          </form>
        </div>
      </div>
    </div>
    </body>
    </html>

CodePudding user response:

Please use findByIdAndUpdate() function instead of findById() and save()

for example;

User.findByIdAndUpdate(userId, {
    isadmin: user.isadmin,
    name: updatedName,
    ...
})
.then((result) => {
  console.log("User EDITED!");
  res.redirect("/staffdir");
})
.catch((err) => console.log(err));
  • Related