【发布时间】:2017-01-16 10:42:22
【问题描述】:
我有一个更新用户信息的页面,当我在页面上编辑任何其他内容时,它编辑得很好并正确显示。但是在城市部分,它只是附加到字段而不是更新它。所以我得到了很多城市而不是一个!
前端形式:
<form action ="/user/<%= user._id %>/?_method=PUT" method="POST">
<section class="side_nav_content">
<section id="name_and_address_section" class="col-md-4">
<div class="form-group">
<label for="username">Username</label>
<input class="form-control" id="username" type="text" name="user[username]" placeholder="Username" value ="<%= user.username %>">
</div>
<div class="form-group">
<label id="nickname">Nickname</label>
<input class="form-control" id="nickname" type="text" name="user[profile.nickname]" placeholder="Nickname" value="<%= user.profile.nickname %>">
</div>
<div class="form-group">
<label id="email">Email</label>
<input class="form-control" id="email" type="email" name="user[email]" placeholder="Email@wherever.com" value="<%= user.email %>">
</div>
<div class="form-group">
<label id="first">First Name</label>
<input class="form-control" id="first" type="text" name="user[name][first]" placeholder="First Name" value="<%= user.name.first %>">
</div>
<div class="form-group">
<label id="middle">Middle Name</label>
<input class="form-control" id="middle" type="text" name="user[name][middle]" placeholder="Middle Name" value="<%= user.name.middle %>" >
</div>
<div class="form-group">
<label id="last">Last Name</label>
<input class="form-control" type="text" name="user[name][last]" placeholder="Last Name" value="<%= user.name.last %>">
</div>
<div class="form-group">
<label id="address">Street Address</label>
<input class="form-control" id="address" type="text" name="user[address]" placeholder="Street Address" value="<%= user.address %>">
</div>
<div class="form-group">
<label id="city">City</label>
<input class="form-control" id="city" type="text" name="user[city]" placeholder="City" value="<%= user.city %>">
</div>
<div class="form-group">
<label id="zip">Zip Code</label>
<input class="form-control" id="zip" type="number" name="user[zipCode]" placeholder="Zip Code" value="<%= user.zipCode %>">
</div>
<button class="btn btn-lg btn-default btn-primary">Save</button>
<a href="/dashboard" class="btn btn-lg btn-info">Cancel</a>
</section>
路线如下:
router.put("/user/:id", isLoggedIn, function(req,res){
console.log(req.user.username);
User.findByIdAndUpdate(req.user.id,
{$set: req.body.user},
{save: true, upsert: true, runValidators: true, new: true}, function(err, updatedUser) {
if (err) {
console.log(err);
} else {
console.log(updatedUser.username);
res.render("admin", {user: updatedUser});
}
})
});
这是用户架构:
const userSchema = new mongoose.Schema({
username: {type:String, required: true, unique: true},
email: {type: String, required: false, unique: false},
password: { type: String, required: true},
resetPasswordToken: String,
resetPasswordExpires: Date,
profile: {picture: String, nickname: String},
permission:{app: Number}, //This will tell the app what level, 0 for Admin, 1 for User
name: {
first:String,
middle:String,
last:String,
other: {
startDate: Date,
endDate: Date,
first: String,
middle: String,
last: String
}
},
lastName: String,
address: String,
city: String,
state: String,
zipCode: Number,
phone: Number,
birthday: Date,
birthplace: String,
userCover: String,
categories: Array,
defaultPermission: Number,
events: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Event"
}],
moments: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Moments"
}],
instants: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Instant"
}],
groups: [
{family:{
type: mongoose.Schema.Types.ObjectId,
ref: "User"}
},
{friends:{
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
},
{colleagues:{
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
}],
likedMoments: [{ //This is for what this person likes, so they can refer later
type: mongoose.Schema.Types.ObjectId,
ref: "Moments"
}],
likedEvents: [{ //This is for what this person likes, so they can refer later
type: mongoose.Schema.Types.ObjectId,
ref: "Event"
}],
favoriteEvents: [{ //This is for personal events that are favorited
type: mongoose.Schema.Types.ObjectId,
ref: "Event"
}],
favoriteMoments: [{ //This is for personal moments that are favorited
type: mongoose.Schema.Types.ObjectId,
ref: "Moments"
}]
})
数据只会添加到city,但它只会更新任何其他字段,我不确定该怎么做,因为我对城市没有任何不同。如您所见,我只是一次更新整个文档?
【问题讨论】:
-
控制台是否显示任何错误?你能分享一下用户架构吗?
-
我已经用架构更新了 OP。我没有看到任何错误
-
您将值
req.body.user传递给$set。在您的表格中,我没有看到任何user的内容。您是否使用客户端 javascript 函数在请求正文中设置user的值?您是否检查过这些值是否设置正确(以匹配userSchema的结构)? -
查看 div 中的
name属性,它们是name[username]等等......所有这些都显示在 req.body.user 中 -
我刚刚注意到一个错误,我输入了
name[username]它实际上是user[username]