Редактирование профиля пользователя в node.js - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь создать форму «Редактировать профиль» во внешнем интерфейсе, используя E js. но ничего не работает

Это код контроллера

exports.getUserInfo = (req, res, next) => {
  const currentUser = req.user;

  User
  .find()
  .then(user =>{
    console.log(user._id);
    res.render('account/informations',{
      user,
      currentUser
    });
  }).catch(err =>{
    const error = new Error(err);
    error.httpStatusCode = 500;
    return next(error);
  });


};

exports.getEditUser = (req, res, next) => {
  const editMode = req.query.edit;
  if (!editMode) {
    return res.redirect('/');
  }
  const userId = req.params.userId;
  User.findById(userId)
    .then(user => {
      if (!user) {
        return res.redirect('/');
      }
      res.render('account/edit-info', {
        pageTitle: 'Edit Account',
        editing: editMode,
        user
      });
    })
    .catch(err => {
      const error = new Error(err);
      error.httpStatusCode = 500;
      return next(error);
    });
};

exports.postEditUser = (req, res, next) => {
  const userId = req.body.userId;
  const updatePhoneNumber = req.body.phoneNumber;
  const updateCity = req.body.city;
  const updateState = req.body.state;
  const updateBloodType = req.body.bloodType;
  User.findById(userId)
    .then(user => {
      if (user.userId.toString() !== req.user._id.toString()) {
        return res.redirect('/');
      }
      user.phoneNumber = updatePhoneNumber;
      user.bloodType = updateBloodType;
      user.city = updateCity;
      user.state = updateState;
      return user.save()
        .then(result => {
          console.log(result);
          console.log(`User Info edited. User Name: ${user.firstName + user.lastName}`);
          res.redirect('/display-info');
        })
        .catch(err => {
          const error = new Error(err);
          error.httpStatusCode = 500;
          return next(error);
        });
    })
    .catch(err => {
      const error = new Error(err);
      error.httpStatusCode = 500;
      return next(error);
    });
};

Код маршрута

router.get('/display-info',isAuth,adminController.getUserInfo);
router.get('/edit-info/:userId',isAuth,adminController.getEditUser);
router.post('/edit-info',isAuth,adminController.postEditUser);

И этот код моего интерфейса тоже

<%- include('../includes/top.ejs') %>

</head>

<body>
  <%- include('../includes/navigation.ejs') %>

  <main class="myContainer">


    <p>First Name</p>
    <div><%= user.firstName %></div>

    <p>Last Name</p>
    <div><%= user.firstName %></div>

    <p>E-mail</p>
    <div><%= user.email %></div>

    <% if (isAuthenticated && user._id.toString() === currentUser._id.toString()) { %>
    <div class="myItem">
      <a href="/edit-info/<%= user._id %>?edit=true" class="btn">Edit</a>
    </div>
    <div class="myItem">
      <input type="hidden" name="_csrf" value="<%= csrfToken %>" />
      <% } %>
    </div>
    </li>

  </main>

  <%- include('../includes/bottom.ejs') %>

интерфейс Редактировать код

<%- include('../includes/top.ejs') %>

</head>

<body>
  <%- include('../includes/navigation.ejs') %>

  <main class="myContainer center">

    <form action="/edit-info" method="POST">

      <label for="firstName">Fist Name</label>
      <div><%= user.firstName%></div>

      <label for="firstName">Last Name</label>
      <div><%= user.lastName%></div>

      <label for="firstName">E-mail</label>
      <div><%= user.email %></div>

      <label for="phoneNumber">Phone Number</label>
      <input type="text" name="phoneNumber" id="phoneNumber" value="<% if (editing) { %><%= user.phoneNumber %><% } %>">

      <label for="state">State</label>
      <input type="text" name="state" id="state" value="<% if (editing) { %><%= user.state %><% } %>">

      <label for="city">City</label>
      <input type="text" name="city" id="city" value="<% if (editing) { %><%= user.city %><% } %>">

      <label for="bloodType">Blood Type</label>
      <input type="text" name="bloodType" id="bloodType" value="<% if (editing) { %><%= user.bloodType %><% } %>">


      <% if (editing) { %>
      <input type="hidden" value="<%= user._id %>" name="userId">
      <% } %>
      <input type="hidden" name="_csrf" value="<%= csrfToken %>" />
      <button class="myButton" type="submit">Submit</button>
    </form>
  </main>

  <%- include('../includes/bottom.ejs') %>

код модели

 const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const userSchema = new Schema({    
    email: {
        type: String,
        required: true
      },
      password: {
        type: String,
        required: true
      },
      firstName:{
        type:String,
        required:true,
      },
      role:{
        type:String,
        require:true,
        default:'user'
      },
      lastName:{
        type:String,
        required:true,
      },
      code:{
        type:String,
        required:true,
      },
      state:{
        type:String,
        required:true,
      },
      city:{
        type:String,
        required:true,
      },
      phoneNumber:{
        type:Number,
        required:true,
      },
      bloodType:{
        type:String,
      },
    resetToken: String,
    resetTokenExpiration: Date
});

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



Есть ли решение этой проблемы? Есть ли проект, который содержит эту точку? Я хочу прочитать код этого проекта

...