Как обновить существующие пользовательские данные в node.js и приложении MongoDB с помощью ejs post form? - PullRequest
0 голосов
/ 30 января 2019

Я чрезвычайно новичок в javascript и нашел видео Брэда Траверси Node.js с паспортной аутентификацией и проследил за его видео до т.

Это сработало для меня, но потом я хотел добавить еще.Я создал пользовательскую панель и навигацию.Одна страница, которую я добавил, была страницей профиля пользователя.Я добавил это, потому что я хочу иметь возможность обновлять информацию пользователя, если это возможно.

Теперь я застрял.Я думаю, что у меня проблема с моей функцией .findOneAndUpdate, которую я поместил в свой маршрут index.js.Возможно, я не правильно использую функцию.В настоящее время я веду запись в консоли как req.body.name, так и req.user.name.

req.body.name - это то, что пользователь вводит как новое имя, req.user.name - это оригинальное имя..

верх и низ index.js

const express = require('express');
const router = express.Router();
const { ensureAuthenticated } = require('../config/auth');
const mongoose = require('mongoose');
require('../models/User');
const User = mongoose.model('User');  

router.post('/', (req, res) => {
    updateRecord(req, res);
});

function updateRecord(req, res) {
User.findOneAndUpdate({ "_id": req.body._id },{
    $set: {
        "name": req.body.name
    }
 }, { new: true }, (err, doc) => {
    if (!err) { 

        console.log(req.user.name);
        console.log(req.body.name);
        res.redirect('/profile'); 
    }
    else {
        console.log('Error during record update : ' + err);
    }
 });
}



module.exports = router;

edit.ejs

<form action="./profile" method="POST">
<div class="form-group">
    <label for="">Full Name</label>
    <input type="text" class="form-control" value="<%= name %>" 
name="name"> 
</div>
<div class="form-group" >
    <label for="">email</label>
    <input type="text" class="form-control" value="<%= email %>" readonly>
</div>
<div class="form-row">
    <div class="form-group">
        <button type="submit" class="btn btn-info"><a href="profileEditor">  
</a> Save Changes</button>
    </div>
    <p>&nbsp; &nbsp;</p>
    <div class="form-group">
        <button class="btn btn-dismiss"><a href="./profile">Exit</a> 
</button></a>
    </div>
</div>
</form>

User.js

const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now
}
});

const User = mongoose.model('User', UserSchema);

module.exports = User;

РЕДАКТИРОВАТЬ

Я следовал инструкциям THEWOLF, и теперь он обновляется до базы данных!Однако теперь, когда я нажимаю кнопку «Сохранить изменения», она перенаправляет на страницу профиля, но отображает старое имя.Только когда вы обновите страницу или отойдете от нее, обновленное имя появится на моем веб-сайте.

Вот новый код index.js

router.post('/', (req, res) => {
   updateRecord(req,res);
   res.redirect('/profile');

});

function updateRecord(req, res) {
User.findOne({_id:req.user.id},(err,doc)=>{
 //this will give you the document what you want to update.. then 
doc.name = req.body.name;
doc.save(function(err,doc){

});

 });

1 Ответ

0 голосов
/ 30 января 2019

в вашей требуемой модели пользователя сделайте это следующим образом

const User=require('../models/User');

затем

function updateRecord(req, res) {
User.findOne({_id:req.body.id},(err,doc)=>{
 //this will give you the document what you want to update.. then 
doc.name = req.body.name; //so on and so forth

// then save that document
doc.save(callback);

});

}
...