这不起作用,因为我的表单有字符串和数组
在Deno / Oak中,我无法返回选中的复选框数组(表单编码是多部分的)
const body = await ctx.request.body({type: 'form-data'})
const formData: Record<string, string> = (await body.value.read()).fields
输出如下:
{
fields: {
title: "nn",
author: "6516425a77906b55577811b0",
summary: "nn",
isbn: "nn",
genre: "652077b1a36908a518ed91b4"
}
}
这里,表单编码是URLencoded
const body = await ctx.request.body({type: 'form'}).value
输出是这样的(这似乎更有希望!),
URLSearchParams {
[Symbol(list)]: [
[ "title", "n" ],
[ "author", "6516425a77906b55577811b0" ],
[ "summary", "n" ],
[ "isbn", "n" ],
[ "genre", "6516425a77906b55577811aa" ],
[ "genre", "6520455aaca724f1c8ac090b" ],
[ "genre", "652077b1a36908a518ed91b4" ],
[ "genre", "65207a7e57543b963db0f29f" ]
],
[Symbol("url object")]: null,
[Symbol("[[webidl.brand]]")]: Symbol("[[webidl.brand]]")
}
使用相同的pug模板,我在Node / Express中所做的就是:
req.body
它的工作原理是简单的,返回的复选框作为一个数组。
输出是这样的(正是我需要的)!
{
title: 'nn',
author: '6516425a77906b55577811b0',
summary: 'nn',
isbn: 'nn',
genre: [
'6516425a77906b55577811aa',
'6520455aaca724f1c8ac090b',
'652077b1a36908a518ed91b4',
'65207bb95ede58c78b1b68c7',
'65215c985e4f1575c1aef29b'
]
}
我需要的橡树输出看起来像这样的工作与它
不确定,如果不能实现这样简单的功能,我是否应该撤销我最后两周的Deno / Oak编码,回到Node。Deno / Oak的意思是更新和更好的权利?
2条答案
按热度按时间z18hc3ub1#
要从
URLSearchParams
访问作为数组的genre
,必须使用URLSearchParams.getAll()
rryofs0p2#
谢谢!我知道getAll。只是我需要在一次调用中获得一个对象中的所有表单数据,就像我现在在Express中所做的那样,因为我并不总是知道会有多少字段,或者字段的名称。它也更灵活。如果数据是express liek格式(作为键值字典,其中值可以是数组),我可以将键/值对象传递给验证函数,然后该函数可以解析和修剪所有数据(检测每个键的值是否是数组,因此它可以处理这些情况)。看起来我需要写一个自定义函数来实现这一点,因为它并没有真正内置到Oak中。