Javascript 使用Deno和Oak处理多部分/表单数据

Javascript 使用Deno和Oak处理多部分/表单数据,javascript,forms,upload,deno,oak,Javascript,Forms,Upload,Deno,Oak,我在学习Deno和Oak方面取得了缓慢但稳定的进展,但这让我感到困惑。我有一个带有文件上载字段的简单web表单: 作者: 文件: 引述: 处理是使用Deno和Oak完成的,下面是处理文本数据的脚本: router.post('/quote',异步上下文=>{ const body=context.request.body({type:'form'}) const value=等待body.value 常量author=value.get('author') console.log(作者) 重

我在学习Deno和Oak方面取得了缓慢但稳定的进展,但这让我感到困惑。我有一个带有文件上载字段的简单web表单:


作者:
文件:
引述:
处理是使用Deno和Oak完成的,下面是处理文本数据的脚本:

router.post('/quote',异步上下文=>{
const body=context.request.body({type:'form'})
const value=等待body.value
常量author=value.get('author')
console.log(作者)
重定向(`/?author=${author}`)
})
路由可以处理一个不具有
多部分/表单数据
编码的表单,但只要我添加该编码,
作者
字段就是
未定义的


我的问题是:如何访问此表单中的数据(文本数据和文件数据)?

解决方案隐藏在。
Context
对象的
Request
属性包含一个
body()
方法。这“解析为请求正文的一个版本”

它接受一个实现
BodyOptions
接口的
options
对象。它有一个名为
type
的属性,如果要解析
multipart/form data
,则该属性的值必须为
form data

在这种情况下,它返回一个实现
FormDataReader
接口的对象,其中包括一个
read()
方法,该方法解析为一个对象,该对象包含来自所有表单字段的数据,包括上载的任何文件

以下是应如何实施的示例:

router.post('/foo',异步上下文=>{
const body=wait context.request.body({type:'form data'})
const data=await body.value.read()
console.log(数据)
context.response.redirect(“/”)
})
这是一个输出的例子。它包括一个
字段
属性,其中包含表单字段中的数据,以及一个
文件
数组,其中包含您上载的所有文件的数据:

{
字段:{name:“Foo”,organization:“Bar”},
档案:[
{
内容:未定义,
contentType:“图像/png”,
名称:“myimage”,
文件名:“/tmp/c8290ba0/e25ee9648e3e5db57f5ef3eb4cfa06704ce5f29c.png”,
原始名称:“foobar.png”
}
]
}

有没有办法在Oak中处理文件上传?我看过一些教程,但它们都使用了坏库。请解释你的答案,不要只是发布代码。这有助于发布问题的人从中学习,而不是加强复制粘贴编码。对不起,有很多方法可以从表单中访问数据,可能会显示更详细的答案
router.post('/quote', async context => {        
    let params: {[key: string]: string} = {};
    let value: any = await context.request.body().value;
    for (const [key, valor] of value) {
        params[key] = valor; 
    }
    const author = params['author']
    console.log(author)
    context.response.redirect(`/?author=${author}`)
})