gpt4 book ai didi

javascript - 如何使用 ejs post 表单更新 node.js 和 MongoDB 应用程序中的现有用户数据?

转载 作者:行者123 更新时间:2023-12-03 00:18:33 25 4
gpt4 key购买 nike

我对 javascript 非常陌生,发现了 Brad Traversy 的视频 Node.js with Passport Authentication,并关注了他的视频。

它对我有用,但后来我想添加更多。我创建了自定义仪表板和导航。我添加的一个页面是用户个人资料页面。我添加此内容是因为我希望能够在可能的情况下更新用户的信息。

现在我被困住了。我认为我放置在路由 index.js 中的 .findOneAndUpdate 函数存在问题。我可能没有正确使用该功能。我目前正在控制台记录 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);

});

}

关于javascript - 如何使用 ejs post 表单更新 node.js 和 MongoDB 应用程序中的现有用户数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54431894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com