我现在想在 node.js 平台上使用 hono.js ,现在需要实现一个文件下载需求
//几个类型导入: import { stream } from "hono/streaming" import { Readable, Writable } from "node:stream" import { ReadableStream } from "node:stream/web" // ...... const fileStream = createReadStream(filePath) // 将文件流作为响应返回给客户端 return stream( c, async (stream) => { // Write a process to be executed when aborted. stream.onAbort(() => { console.log('Aborted!') }) // Write a Uint8Array. await stream.write( new Uint8Array([0x48, 0x65, 0x6c, 0x6c, 0x6f]) ) // Pipe a readable stream. // 这里出现了类型不兼容 // await stream.pipe(Readable.toWeb(fileStream)) await stream.pipe(ReadableStream.from(fileStream)) }, async (err, stream) => { // stream.writeln('An error occurred!') console.error('An error occurred!', err) } )
ts 提示: 类型“import("stream/web").ReadableStream<any>”的参数不能赋给类型“ReadableStream<any>”的参数. 属性“pipeThrough”的类型不兼容。
我该如何解决,或者说如何在 nodejs 环境使用...
谢谢大家了!
1 fov6363 245 天前 加个 any 先跑起来 |
2 fov6363 245 天前 ![]() await stream.pipe((ReadableStream as any).from(fileStream)) |
![]() | 3 Belmode OP |
4 @Belmode 看代码是与 hono/streaming 的 stream 类型冲突了,检查一下 hono/streaming 的 typescript 与你 package.json 中的 typescript 版本是否一致 |
![]() | 7 Aolose 245 天前 说 any 的别误导人啊,不兼容就是不兼容 web 的 stream 和 node 的 stream 接口都不一样 你 as any 还要什么 ts ? 我没有看过 hono 的 stream 不过从这个 pipe 看应该是实现的 node stream 的设计 你转 httpresponse body 的 stream 可以使构建一个 TransformStream 或者 readablestream |
![]() | 8 jiangzhexin 245 天前 hono 的 ReadableStream 就是 Web Standards ,我一般建议是尽量避免使用 node 私有的 API ,毕竟像 hono 这种框架主要卖点就是 Web Standards 特别是 Readable.toWeb() 的结果也是 node 内部的 ReadableStream 类型 你可以想办法把 fileStream 转化为标准的 ReadableStream ,或者创建这个 fileStream 就避免创建出 node 私有的 ReadableStream |
![]() | 9 Aolose 245 天前 |