我正在尝试在 lichess.org 上使用此端点的数据。
这是一个使用该数据流的 React 组件的最小工作示例。我正在使用一个名为can-ndjson-stream的库。
import ndjsonStream from "can-ndjson-stream"
import { useEffect } from "react"
function App() {
useEffect(() => {
fetch("https://lichess.org/api/tv/feed")
.then(res => ndjsonStream(res.body))
.then(stream => {
const streamReader = stream.getReader()
streamReader.read().then(async res => {
while (!res || !res.done) {
res = await streamReader.read()
console.log(res.value)
}
})
})
.catch(console.error)
}, [])
return <>Lorem Ipsum</>
}
export default App
但是,如果我尝试编写相同的代码并像这样在 Node 中运行它:
import ndjsonStream from "can-ndjson-stream"
import fetch from "node-fetch"
fetch("https://lichess.org/api/tv/feed")
.then(res => ndjsonStream(res.body))
.then(stream => {
const streamReader = stream.getReader()
streamReader.read().then(async res => {
while (!res || !res.done) {
res = await streamReader.read()
console.log(res.value)
}
})
})
.catch(console.error)
我收到此错误:
ReferenceError:ReadableStream 未在 ndjsonStream 中定义
因此,从 fetch 中获取的似乎res
是 null 或未定义,但获取其他 API 工作正常。
我还尝试使用axios而不是node-fetch,如下所示:
import ndjsonStream from "can-ndjson-stream"
import axios from "axios"
axios
.get("https://lichess.org/api/tv/feed")
.then(res => ndjsonStream(res.data))
.then(stream => {
const streamReader = stream.getReader()
streamReader.read().then(async res => {
while (!res || !res.done) {
res = await streamReader.read()
console.log(res.value)
}
})
})
.catch(console.error)
但它只是挂起并且没有显示输出。感谢任何可以对此有所了解或提供在 Node.js 中运行它的任何替代方法的人。