我使用这样的方式发布到快递应用程序:
$.ajax
type: "POST"
url: localUrl
data: data
cache: false
dataType: 'native'
xhrFields:
responseType: 'blob'
这就是data
的样子:
data =
'options':
'format': 'Letter'
'border':
'top': '2in'
'right': '1in'
'bottom': '2in'
'left': '1.5i'
'header':
'height': '45mm'
'contents': header
当我在Express应用程序中记录req.body
时,结果如下所示:
{
'options[format]': 'Letter',
'options[border][top]': '2in',
'options[border][right]': '1in',
'options[border][bottom]': '2in',
'options[border][left]': '1.5i',
'options[header][height]': '45mm',
'options[header][contents]': '<div class="pdf-header">\n\tChart generated by http://collab.craft.dev\n</div>',
'options[footer][height]': '28mm',
'options[footer][contents]': '<div class="pdf-footer">\n\tTue May 24 2016 10:32:36 GMT+0100 (BST)\n</div>'
}
这意味着我无法使用border.top
访问(例如)req.body.options.border.top
媒体资源。
这里发生了什么,我如何确保维护对象结构?
非常感谢!
答案 0 :(得分:1)
您需要启用"extended syntax":
app.use( bodyParser.urlencoded({ extended : true }) );
答案 1 :(得分:1)
首先 - How to retrieve POST query parameters in Expres s
其次,我们为结构验证
介绍一些方法function isValid(o, validStructure) {
return Object.keys(validStructure).every(function(key) {
if (Object.prototype.toString.call(validStructure[key]) === '[object Object]') {
return isValid(o[key], validStructure[key])
} else {
return Object.prototype.toString.call(validStructure[key]) === Object.prototype.toString.call(o[key])
}
})
}
之后,您可以将收到的对象与完美的对象进行比较,就像那样;
var expetedStructure = {
a: {},
b: 'String',
c: [],
d: 1,
e: {
f: 'a'
}
}
if(isValid(requestObj, expectedStructure)) {
// suport it as requested object has valid structure
} else {
// support validation error
}