Javascript 使用Deno和Oak处理多部分/表单数据
我在学习Deno和Oak方面取得了缓慢但稳定的进展,但这让我感到困惑。我有一个带有文件上载字段的简单web表单: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完成的,下面是处理文本数据的脚本:
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}`)
})