multipart/form-data 在 Typescript Hapijs 中处理
multipart/form-data handling in Typescript Hapijs
我正在尝试制作一个 API 可以在打字稿中使用 HapiJS 接受和解析 CSV 文件。我在 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 使用它。我也找不到 class 有效载荷接口可以扩展。
- 这是最大的问题。有效负载选项的允许 属性 不知何故对我不起作用。
payload: {
output: 'stream',
parse: true,
//allow: 'multipart/form-data',
},
一旦我取消注释允许 属性 并发出 POST 请求,POSTMAN 就会抛出 415 Unsupported Media Type 错误。尽管 POSTMAN 请求确实有一个有效的 multipart/form-data。
我如何检索此请求?
我认为负载配置不正确。
Version 19.0.0 引入了关于多部分配置的重大更改。
从这个版本开始,负载配置的 multipart
属性 默认为 false
,这意味着您必须将其指定为 false
以外的其他内容让它接受多部分有效载荷。
根据 docs 应将其设置为 true
或使用包含 output
属性.
规范的对象
所以试试这个:
payload: {
parse: true,
allow: 'multipart/form-data',
multipart: { output: 'stream' },
}
关于编译错误,可以使用any
类型进行转换:
const payload: any = req.payload
const data = payload.files
对于第二点,您可以尝试强制执行您的负载类型。
示例:
const { files } = request.paylad as YourInterface;
我正在尝试制作一个 API 可以在打字稿中使用 HapiJS 接受和解析 CSV 文件。我在 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 使用它。我也找不到 class 有效载荷接口可以扩展。
- 这是最大的问题。有效负载选项的允许 属性 不知何故对我不起作用。
payload: {
output: 'stream',
parse: true,
//allow: 'multipart/form-data',
},
一旦我取消注释允许 属性 并发出 POST 请求,POSTMAN 就会抛出 415 Unsupported Media Type 错误。尽管 POSTMAN 请求确实有一个有效的 multipart/form-data。 我如何检索此请求?
我认为负载配置不正确。 Version 19.0.0 引入了关于多部分配置的重大更改。
从这个版本开始,负载配置的 multipart
属性 默认为 false
,这意味着您必须将其指定为 false
以外的其他内容让它接受多部分有效载荷。
根据 docs 应将其设置为 true
或使用包含 output
属性.
所以试试这个:
payload: {
parse: true,
allow: 'multipart/form-data',
multipart: { output: 'stream' },
}
关于编译错误,可以使用any
类型进行转换:
const payload: any = req.payload
const data = payload.files
对于第二点,您可以尝试强制执行您的负载类型。
示例:
const { files } = request.paylad as YourInterface;