使用Express和Mongoose将表单数据发布到现有MongoDB文档的数组

编程入门 行业动态 更新时间:2024-10-22 11:27:30
本文介绍了使用Express和Mongoose将表单数据发布到现有MongoDB文档的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试创建一个Mongo文档,然后从一个表单中更新文档以具有其他属性,其中一个具有一个对象数组。

m能够将除物体之外的所有东西保存到地址数组。

以下代码片段显示了我当前尝试将对象保存到地址数组。我觉得我错过了我尝试的推送或移位,似乎无法得到正确的语法。

Mongoose Schema:

var UserSchema = new mongoose.Schema({ username:{type:String,lowercase:true} ,密码:{type:String} ,电子邮件:{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} }] });

模型方法: 首先我创建一个帐户。该表单只要求用户名,电子邮件,密码,然后重定向到玉器文件,用户可以填写其余的表单。

module.exports = exports = function(){ //创建帐户 this.createAndSave = function(req,res){ new User({ username:req。 body.username ,密码:req.body.password ,电子邮件:req.body.email ,电话:req.body.phone ,地址:[{昵称: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)})} //更新帐户 this.updateRequest = function(req,res){ User.update ({username:req.user.username},{ username:req.body.username ,email:req.body.email ,phone:req.body.phone ,通讯:req.body.newsletter ,地址:[{昵称: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} form(method =POST ,action =/ account /#{user.username}) input(type =hidden,name =_ method,value =PUT) .form-group label(for =username)名称输入#name.form-control(type =text,name =username,value = user.username) .form -group label(for =email)电子邮件 input#email.form-control(type =email,name =email,value = user.email) .form-group label手机输入#phone.form-control(type =text,name =phone,value = user.phone) .form-group label通讯选项输入/输出 input#newsletter(type =checkbox,name =newsletter,checked =(true === false?checked:undefined) ) if(user.address.length> 0) for(var i = 0; i< user.shippi ngAddresses.length;我的名字=streetAddress,value = user。 shippingAddresses [i] .streetAddress) .form-group 标签地址续输入#address2.form-control(type =text,name =streetAddress2 value = user.shippingAddresses [i] .streetAddress2) .form-group 标签邮政编码输入#zip.form-control(type =text,name = zip,value = user.shippingAddresses [i] .zip) else .form-group 标签位置昵称 input#address.form-control(type = text,name =nickname,value =) .form-group label街道地址 input#address.form-control(type =text NAME =streetAddr ess,value =) .form-group label Address Cont。 输入#address2.form-control(type =text,name =streetAddress2,value =) .form-group 标签状态输入#state.form -control(type =text,name =state,value =) .form-group label邮政编码输入#zip.form-control(type =text ,name =zip,value =) 按钮(type =submit)更新帐户

另外还有另一个地址,这就是为什么地址是一个数组。

任何方向都是非常有帮助的,因为我可能会随时随地。如果你进一步的代码让我知道。另外要注意的是,我无法从更新功能中获取任何更新的数据,以保存到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); } })}

I'm attempting to create a Mongo document then update the document form a form to have additional properties, one of which has an array of objects.

I'm able to save everything except objects to the address array.

The following code snippets show my current attempt to save an object to the address array. I feel like I'm missing a push or shift which I've tried and can't seem to get syntax correct.

Mongoose Schema:

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

Model Methods: First I create an account. The form only asks for username, email, password then redirects to the jade file where users can fill out the rest of the form.

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

Jade Template: (I'm sure this could be cleaner)

h1 Edit User #{user} form(method="POST", action="/account/#{user.username}") input(type="hidden", name="_method", value="PUT") .form-group label(for="username") Name input#name.form-control(type="text", name="username", value= user.username ) .form-group label(for="email") Email input#email.form-control(type="email", name="email", value= user.email ) .form-group label Phone input#phone.form-control(type="text", name="phone", value= user.phone ) .form-group label Newsletter Opt In/Out input#newsletter(type="checkbox", name="newsletter", checked=(true===false ? "checked" : undefined)) if(user.address.length > 0) for (var i = 0; i < user.shippingAddresses.length; i++) {}>) .form-group label Street Address input#address.form-control(type="text", name="streetAddress", value= user.shippingAddresses[i].streetAddress ) .form-group label Address Continued input#address2.form-control(type="text", name="streetAddress2", value= user.shippingAddresses[i].streetAddress2 ) .form-group label Zip Code input#zip.form-control(type="text", name="zip", value= user.shippingAddresses[i].zip ) else .form-group label Location Nick Name input#address.form-control(type="text", name="nickname", value= ) .form-group label Street Address input#address.form-control(type="text", name="streetAddress", value= ) .form-group label Address Cont. input#address2.form-control(type="text", name="streetAddress2", value= ) .form-group label State input#state.form-control(type="text", name="state", value= ) .form-group label Zip Code input#zip.form-control(type="text", name="zip", value= ) button(type="submit") Update Account

Additionally there is another address only form which is why the address is an array.

Any direction would be very helpful as I may go unhinged at any moment. If you any further code let me know.

Something else to note, I'm not able to get any of the updated data from the update function to save to mongo.

Thanks!

解决方案

Here is the solution I came up with. I find the document to update and push an object to the property that stores the array.

Example method:

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

更多推荐

使用Express和Mongoose将表单数据发布到现有MongoDB文档的数组

本文发布于:2023-11-22 19:21:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1618692.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   表单   文档   数据   Express

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!