对象属性关键字在客户端(Express)中是不同的,
我使用Node,Express和MongoDB / Mongoose来处理我的第一个CRUD应用程序(梦想杂志)。
我创build一个基于几个用户表单input的简单对象,然后向服务器提交一个post请求,然后调用Mongoose.save()。
然而,我在客户端创build的对象与服务器正在接收的对象略有不同,我完全丧失了原因。
首先,我从表单中获取一些值并将其放入一个对象中:
// within button click event handler var dreamText = $('#dream-text').val().trim(); var dreamTags = ["tag 1", "tag 2", "tag 3"]; // for debugging var dreamLucid = $('#dream-lucid').val() == 'Yes' ? true : false; var dreamDate = $('#dream-date').val(); var dream = { userID: 'test', text: dreamText, tags: dreamTags, isLucid: dreamLucid, dateCreated: dreamDate };
在这里,一个console.log的梦想显示了一切,因为它应该是:
Object {userID: "test", text: "sample text", tags: Array[3], isLucid: false, dateCreated: "2016-08-08"}
从那里我提交一个POST请求与梦想的对象:
$.ajax({ type: 'POST', url: '/new', data: dream, success: function(data){ console.log('dream saved'); } });
现在在服务器端,与Express和Mongoose,我试图将对象保存到一个数据库:
router.post('/', urlencodedParser, function(req, res) { console.log(req.body); var newDream = Dream(req.body).save(function(err, data){ if (err) { throw error; } }); });
除了标签之外的所有属性都保存正确,并且req.body
的console.log req.body
产生:
{ userID: 'test', text: 'sample text', 'tags[]': [ 'tag 1', 'tag 2', 'tag 3' ], isLucid: 'false', dateCreated: '2016-08-08' }
任何想法为什么客户端的tags
属性变成'tags[ ]'
当它通过POST请求通过?
我试过两个tags: Array
和tags: [String]
在我的Mongoose模型,但问题似乎发生之前,我曾经调用Mongoose.save.
默认情况下, $.ajax()
将POST操作编码为application/x-www-form-urlencoded
,它与数组做不同的事情。 您可能只想发送JSON,以便您可以在服务器上接收JSON。
您可以通过手动将数据转换为JSON并适当设置内容types来发生这种情况:
$.ajax({ type: 'POST', url: '/new', data: JSON.stringify(dream), contentType: "application/json", success: function(data){ console.log('dream saved'); } });
然后,您可能还需要在服务器端parsingJSON,无论是手动执行此请求还是使用一些中间件(如bodyParser.json()
。