我更新用户配置文件的帖子路由在JS Web应用程序中不起作用。 (猫鼬,节点和护照)

发布于 2025-02-03 12:37:27 字数 3606 浏览 1 评论 0原文

嗨,我当前被卡住了,我的更新路由被打破了,当我单击“更新”按钮时,用户配置文件不会在数据库中更新。我正在使用Passport获取用户ID,但它在我需要的文件的顶部亮了,我不知道为什么。

我以前在一个类似的项目中做到了这一点,而且效果很好,所以我不确定这里发生了什么。

提前致谢。

user.js: 

const router = require('express').Router();
const ObjectID = require('mongodb').ObjectID;
const passport = require('passport');
const User = require('../models/user');

router.post('/edit-profile', async (req, res, next) => {
  const update = {firstname: req.body.firstname, lastname: req.body.lastname, email: req.body.email, benchpress: req.body.benchpress, squat: req.body.squat, deadlift: req.body.deadlift}
  const _id = ObjectID(req.session.passport.user);
  const filter = { id: _id };
  const updatedDocument = await User.findOneAndUpdate(filter, update, { new: true });

  //return res.status(200).send(updatedDocument);
  res.render('profile', updatedDocument);
});

edit-profile.ejs:

<div class="main">
    <form action="/edit-profile" method="POST" class="ep-form">
        <div>
            <label for="name">First Name:</label>
            <input type="text"name="firstname" id="firstname" value="<%= user.firstname %>" placeholder="First Name">
        </div>
        <div>
            <label for="name">Last Name:</label>
            <input type="text"name="lastname" id="lastname" value="<%= user.lastname %>" placeholder="Last Name">
        </div>
        <div>
            <label for="name">Email Address:</label>
            <input type="email"name="email" id="email" value="<%= user.email %>" placeholder="Email Address">
        </div>
        <div>
            <label for="name">Bench Press:</label>
            <input type="text"name="benchpress" id="benchpress" value="<%= user.benchpress %>" placeholder="Bench Press">
        </div>
        <div>
            <label for="name">Squat:</label>
            <input type="text"name="squat" id="squat" value="<%= user.squat %>" placeholder="Squat">
        </div>
        <div>
            <label for="name">Deadlift:</label>
            <input type="text"name="deadlift" id="deadlift" value="<%= user.deadlift %>" placeholder="Dead Lift">
        </div>
        <button type="submit">Update</button>
    </form>
    <a href="./profile">Back to profile</a>
</div>

护照初始化:

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/user');

passport.use(
  new LocalStrategy(
    {
      usernameField: 'email',
      passwordField: 'password',
    },
    async (email, password, done) => {
      try {
        const user = await User.findOne({ email });
        // Username/email does NOT exist
        if (!user) {
          return done(null, false, {
            message: 'Username/email not registered',
          });
        }
        // Email exist and now we need to verify the password
        const isMatch = await user.isValidPassword(password);
        return isMatch
          ? done(null, user)
          : done(null, false, { message: 'Incorrect password' });
      } catch (error) {
        done(error);
      }
    }
  )
);

passport.serializeUser(function (user, done) {
  done(null, user.id);
});

passport.deserializeUser(function (id, done) {
  User.findById(id, function (err, user) {
    done(err, user);
  });
});

Hi I am currently stuck where my update route is broken and when I click the update button, the user profile does not get updated in the database. I am using passport to get the user id but it's greyed out at the top of the file where I am requiring it and I don't know why.

I have done this before in a similar project and it worked fine, so I'm not sure what is going on here.

Thanks in advance.

user.js: 

const router = require('express').Router();
const ObjectID = require('mongodb').ObjectID;
const passport = require('passport');
const User = require('../models/user');

router.post('/edit-profile', async (req, res, next) => {
  const update = {firstname: req.body.firstname, lastname: req.body.lastname, email: req.body.email, benchpress: req.body.benchpress, squat: req.body.squat, deadlift: req.body.deadlift}
  const _id = ObjectID(req.session.passport.user);
  const filter = { id: _id };
  const updatedDocument = await User.findOneAndUpdate(filter, update, { new: true });

  //return res.status(200).send(updatedDocument);
  res.render('profile', updatedDocument);
});

edit-profile.ejs:

<div class="main">
    <form action="/edit-profile" method="POST" class="ep-form">
        <div>
            <label for="name">First Name:</label>
            <input type="text"name="firstname" id="firstname" value="<%= user.firstname %>" placeholder="First Name">
        </div>
        <div>
            <label for="name">Last Name:</label>
            <input type="text"name="lastname" id="lastname" value="<%= user.lastname %>" placeholder="Last Name">
        </div>
        <div>
            <label for="name">Email Address:</label>
            <input type="email"name="email" id="email" value="<%= user.email %>" placeholder="Email Address">
        </div>
        <div>
            <label for="name">Bench Press:</label>
            <input type="text"name="benchpress" id="benchpress" value="<%= user.benchpress %>" placeholder="Bench Press">
        </div>
        <div>
            <label for="name">Squat:</label>
            <input type="text"name="squat" id="squat" value="<%= user.squat %>" placeholder="Squat">
        </div>
        <div>
            <label for="name">Deadlift:</label>
            <input type="text"name="deadlift" id="deadlift" value="<%= user.deadlift %>" placeholder="Dead Lift">
        </div>
        <button type="submit">Update</button>
    </form>
    <a href="./profile">Back to profile</a>
</div>

passport initialise:

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/user');

passport.use(
  new LocalStrategy(
    {
      usernameField: 'email',
      passwordField: 'password',
    },
    async (email, password, done) => {
      try {
        const user = await User.findOne({ email });
        // Username/email does NOT exist
        if (!user) {
          return done(null, false, {
            message: 'Username/email not registered',
          });
        }
        // Email exist and now we need to verify the password
        const isMatch = await user.isValidPassword(password);
        return isMatch
          ? done(null, user)
          : done(null, false, { message: 'Incorrect password' });
      } catch (error) {
        done(error);
      }
    }
  )
);

passport.serializeUser(function (user, done) {
  done(null, user.id);
});

passport.deserializeUser(function (id, done) {
  User.findById(id, function (err, user) {
    done(err, user);
  });
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文