【发布时间】:2020-11-17 06:54:03
【问题描述】:
我正在尝试使用打字稿中的 HapiJS 制作一个可以接受和解析 CSV 文件的 API。我在 nodeJS 中测试了以下 API,结果非常好。
server.route({
path: '/file',
method: 'POST',
config: {
handler: (req, h) => {
let results = []
let count = 0
const payload = req.payload
const data = payload.files
data.pipe(csv({ headers: false }))
.on('data', (data) => results.push(data))
.on('end', () => {
results.forEach(result => {
console.log(result['0'])
})
});
return "file read"
},
payload: {
output: 'stream',
parse: true,
allow: 'multipart/form-data'
}
}
})
我尝试在 Typescript 中复制它,并且已经使用了很长时间。我有以下问题:
- 如何将有效负载对象转换为可用的类型?我有我的有效载荷对象抛出:
Element implicitly has an 'any' type because expression of type '"files"' can't be used to index type 'string | object | Buffer | Readable'.
Property 'files' does not exist on type 'string | object | Buffer | Readable'.
37 const data = payload['files']
我创建了一个接口,但不知道如何强制 Payload 使用它。我也找不到负载接口可以扩展的类。
- 这是最大的问题。 payload 选项的 allow 属性对我不起作用。
payload: {
output: 'stream',
parse: true,
//allow: 'multipart/form-data',
},
只要我取消注释允许属性并发出 POST 请求,POSTMAN 就会抛出 415 Unsupported Media Type 错误。即使 POSTMAN 请求确实具有有效的多部分/表单数据。 如何检索此请求?
【问题讨论】:
-
你的界面是什么样的?
-
@Christian 目前,我还没有实现任何东西,因为我不确定要扩展什么来让 Payload 拥有文件属性。对多部分问题有什么想法吗?
-
不应该是
file而不是payload上的files吗? -
应该是这样。但显然,文件工作并且文件抛出了错误。也许我做错了什么。
标签: node.js typescript httprequest multipartform-data hapijs