Я пытаюсь выполнить базовое обновление информации о пользователе в моем приложении.
Моя пользовательская схема определена здесь в ее собственном файле модели:
var UserSchema = new mongoose.Schema({
firstname: String,
lastname: String,
username: String,
password: String,
email: String,
zip: String,
bio: String,
influences: String,
favBooks: String,
notWriting: String,
favHero: String,
favVillain: String
});
Пользовательмодель импортируется и требуется в моем файле маршрута пользователя js.
var User = require('../models/userModel');
Когда пользователь создает свою учетную запись, требуются только имя, фамилия, адрес электронной почты и пароль.Остальные поля не являются.
Когда пользователь нажимает на кнопку, чтобы редактировать свой профиль, это мой маршрут для формы редактирования "show".
// edit profile get route
router.get('/:id/edit', isLoggedIn, function(req, res) {
// find the right user by id
User.findById(req.params.id, function(err, foundUser) {
if (err) throw err
res.render('editProfile', {currentUser: foundUser});
});
});
Он возвращает правильного (текущего) пользователя.
В файле editprofile html / view (я использую pug в качестве движка шаблонов, поэтому он может выглядеть странно), у меня есть эта форма.
form(action='/users/' + currentUser._id + '?_method=PUT', method='POST')
.form-row
.form-group
label(for="profilePic") Add or change your profile picture
input.form-control-file#profilePic(type="file", name='profilePic')
.form-row.mt-2
.col-sm-6
label(for="firstname") First name
input.form-control#firstname(type="text", name='firstname')
.col-sm-6
label(for="lastname") Last name
input.form-control#lastname(type="text", name='lastname')
.form-row.mt-2
.col-sm-6
label(for="country") Country/Region
select.form-control#country
option United States
.col-sm-6
label(for="zip") Zip Code
input.form-control(type='text', name='zip', placeholder='Zip')
.form-row.mt-2
.col-sm-12
label(for="bio") Bio/Summary
textarea.form-control#bio(name="bio", cols="30", rows="10", placeholder="Tell us about you...")
.form-row.mt-2
label(for="influences") Who are your influences?
small.ml-2 (comma separated values only)
input.form-control#influences(type='text', name='influences', placeholder='i.e. JK Rowling, Charles Dickens, Sylvia Plath, Stephen King')
.form-row.mt-2
label(for="favBooks") What are your favorite books?
small.ml-2 (comma separated values only)
input.form-control#favBooks(type='text', name='favBooks', placeholder='i.e. Ulysses, War and Peace, Emma, The Great Gatsby')
.form-row.mt-2
label(for="notWriting") When I'm not writing, I'm...
small.ml-2 (comma separated values only)
input.form-control#notWriting(type='text', name='notWriting', placeholder='i.e. reading, eating, sleeping')
.form-row.mt-2
label(for="favHero") My favorite hero/heroines are...
small.ml-2 (comma separated values only)
input.form-control#favHero(type='text', name='favHero', placeholder='i.e. Harry Potter, robinson Crusoe, Sherlock Holmes, Guinevere')
.form-row.mt-2
label(for="favVillain") My favorite villains are...
small.ml-2 (comma separated values only)
input.form-control#favVillain(type='text', name='favVillain', placeholder='i.e. Professor Moriarty, Sauron, Dracula, The White Witch')
.form-row.mt-2
.btn-group.ml-auto
a.btn.btn-danger.mr-2.text-white Discard changes
button.btn.btn-primary(type='submit') Save profile changes
Форма захватывает данные, так как я могу консоль записывать значения с помощью этого кода пут / пост в файле маршрута пользователя на стороне сервера.
router.put('/:id', isLoggedIn, function(req, res) {
// find and update the correct user
var firstname = req.body.firstname;
var lastname = req.body.lastname;
var zip = req.body.zip;
var bio = req.body.bio;
var influences = req.body.influences;
var favBooks = req.body.favBooks;
var notWriting = req.body.notWriting;
var favHero = req.body.favHero;
var favVillain = req.body.favVillain;
});
Я пробовал два разных методаобновить пользователя с новой информацией, и оба не работают.Не уверен, что я делаю не так.Найден правильный пользователь, он не утешает лог ошибок, но после того, как я запустил код и вернулся в базу данных mongo и нашел пользователя, старая информация все еще там.Есть идеи?
return User.update(req.params.id, {firstname: firstname});
User.findByIdAndUpdate(req.params.id, firstname, function(err, foundUser) {
if(err) {
console.log(err);
} else {
console.log("Updated")
console.log(foundUser);
}
});
// redirect to user profile page