Javascript 使用Express和Mongoose将表单数据发布到现有MongoDB文档的数组中
我正在尝试创建一个Mongo文档,然后将文档表单更新为具有附加属性的表单,其中一个具有对象数组 我可以将除对象以外的所有内容保存到地址数组中 以下代码段显示了我当前将对象保存到地址数组的尝试。我觉得我错过了一个我尝试过但语法不正确的推动或转换 猫鼬模式:Javascript 使用Express和Mongoose将表单数据发布到现有MongoDB文档的数组中,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在尝试创建一个Mongo文档,然后将文档表单更新为具有附加属性的表单,其中一个具有对象数组 我可以将除对象以外的所有内容保存到地址数组中 以下代码段显示了我当前将对象保存到地址数组的尝试。我觉得我错过了一个我尝试过但语法不正确的推动或转换 猫鼬模式: var UserSchema = new mongoose.Schema({ username: { type: String, lowercase: true } , password: { type: String }
var UserSchema = new mongoose.Schema({
username: { type: String, lowercase: true }
, password: { type: String }
, email: { type: String, lowercase: true }
, phone: { type: String }
, newsletter: Boolean
, created: { type: Date, default: Date.now }
, address: [{
nickname: { type: String }
, streetAddress: { type: String }
, streetAddress2: { type: String }
, state: { type: String }
, zip: { type: String }
}]
});
模型方法:
首先,我创建一个帐户。表单只要求输入用户名、电子邮件和密码,然后重定向到jade文件,用户可以在那里填写表单的其余部分
module.exports = exports = function(){
//create account
this.createAndSave = function (req, res ) {
new User({
username: req.body.username
, password: req.body.password
, email: req.body.email
, phone: req.body.phone
, address: [{
nickname: req.body.nickname
, streetAddress: req.body.streetAddress
, streetAddress2: req.body.streetAddress2
, state: req.body.state
, zip: req.body.zip
}]
}).save(function (err, user){
if (err) throw err;
req.session.isLoggedIn = true;
req.session.user = user.username;
res.redirect('/account/' + user.username)
})
}
//update account
this.updateRequest = function (req, res) {
User.update({username: req.user.username}, {
username: req.body.username
, email: req.body.email
, phone: req.body.phone
, newsletter: req.body.newsletter
, address: [{
nickname: req.body.nickname
, streetAddress: req.body.streetAddress
, streetAddress2: req.body.streetAddress2
, state: req.body.state
, zip: req.body.zip
}]
}, function (err) {
res.redirect("/account/" + req.body.username);
});
}
翡翠模板:(我相信这会更干净)
h1编辑用户
#{user}
表单(method=“POST”,action=“/account/{user.username}”)
输入(type=“hidden”,name=“\u method”,value=“PUT”)
.表格组
标签(for=“username”)名称
输入#name.form控件(type=“text”,name=“username”,value=user.username)
.表格组
标签(for=“email”)电子邮件
输入#email.form控件(type=“email”,name=“email”,value=user.email)
.表格组
标签电话
输入#phone.form控件(type=“text”,name=“phone”,value=user.phone)
.表格组
标签时事通讯选择加入/退出
输入#新闻稿(type=“checkbox”,name=“newsletter”,checked=(true==false?“checked”:未定义))
如果(user.address.length>0)
对于(var i=0;i)
.表格组
标签街道地址
输入#address.form控件(type=“text”,name=“streetAddress”,value=user.shippingAddresses[i].streetAddress)
.表格组
标签地址(续)
输入#address2.form控件(type=“text”,name=“streetAddress2”,value=user.shippingAddresses[i].streetAddress2)
.表格组
标签邮政编码
输入#zip.form控件(type=“text”,name=“zip”,value=user.shippingAddresses[i].zip)
其他的
.表格组
标签位置昵称
输入#address.form控件(type=“text”,name=“昵称”,value=)
.表格组
标签街道地址
输入#address.form控件(type=“text”,name=“streetAddress”,value=)
.表格组
标签地址控制。
输入#address2.form控件(type=“text”,name=“streetAddress2”,value=)
.表格组
标签状态
输入#state.form控件(type=“text”,name=“state”,value=)
.表格组
标签邮政编码
输入#zip.form控件(type=“text”,name=“zip”,value=)
按钮(type=“submit”)更新帐户
此外,还有另一种仅用于地址的形式,这就是地址是数组的原因
任何方向都会很有帮助,因为我随时都可能精神错乱。如果您有任何进一步的代码,请告诉我
另外需要注意的是,我无法从update函数获取任何更新的数据来保存到mongo
谢谢 这是我想出的解决办法。我找到要更新的文档并将对象推送到存储数组的属性 示例方法:
this.addAddress = function (req, res) {
var newAddress = {
nickname: req.body.nickname,
streetAddress: req.body.streetAddress,
streetAddress2: req.body.streetAddress2,
state: req.body.state,
zip: req.body.zip
}
User.update({username: req.session.user}, { $push : {
address: newAddress
}}, {upsert: true}, function ( err ) {
if(err){
console.log(err);
}else{
console.log("Successfully added");
}
})
}
这是我想出的解决办法。我找到要更新的文档并将对象推送到存储数组的属性 示例方法:
this.addAddress = function (req, res) {
var newAddress = {
nickname: req.body.nickname,
streetAddress: req.body.streetAddress,
streetAddress2: req.body.streetAddress2,
state: req.body.state,
zip: req.body.zip
}
User.update({username: req.session.user}, { $push : {
address: newAddress
}}, {upsert: true}, function ( err ) {
if(err){
console.log(err);
}else{
console.log("Successfully added");
}
})
}