簡體   English   中英

如何使用 ejs 發布表單更新 node.js 和 MongoDB 應用程序中的現有用戶數據?

[英]How to update existing user data in a node.js and MongoDB app with ejs post form?

我對 javascript 非常陌生,發現 Brad Traversy 的視頻 Node.js 帶有 Passport Authentication 並關注他的視頻。

它對我有用,但后來我想添加更多。 我創建了一個自定義儀表板和導航。 我添加的一個頁面是用戶個人資料頁面。 我添加這個是因為我希望能夠盡可能更新用戶的信息。

現在我卡住了。 我認為我在我的路線 index.js 中放置的 my.findOneAndUpdate function 有問題。 我可能沒有正確使用該功能。 我目前正在控制台記錄 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;

編輯.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>

用戶.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){

});

 });

在您需要的用戶模型中這樣做

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);

});

}
 await UserSchema.findByIdAndUpdate({ _id: _id }, { name:req.body.name }, (err, updated) => {
    if (!err) {
         return res.status(201).send({
            status: true,
            message: "User Account Updated Successfully!",
         });
    }
    else{
        return res.status(500).send({
            status: false,
            error: err.message,
         });
    }
}).clone();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM