首页 > 解决方案 > NodeJS将数据从流发送到前端(ReactJS)

问题描述

进展如何?

我如何将大数据(巨大的请求)发送到前端?我是从 PostgreSQL 中提取数据,但是如何将这些数据响应前端(Json 示例)?谢谢

这是我的代码

const express = require('express');
const cors = require('cors');
const pool = require('./keys/db');
const QueryStream = require('pg-query-stream')
const JSONStream = require('JSONStream')

const app = express();

const PORT = process.env.PORT || 3000;

//middleware
app.use(cors());
app.use(express.json()) 


//starting server
app.listen(PORT,()=>{
console.log(`Server is running on port ${PORT}`)
});

app.get("/to",async(req,res)=>{
try {

    const anyData = await pool.connect((err, client, done) => {
        if (err) throw err;
        const query = new QueryStream(`SELECT"_reference180"."_description" AS person FROM "_reference180"  `)
        const stream = client.query(query)
        //release the client when the stream is finished
        stream.on('end', done)
        stream.pipe(JSONStream.stringify()).pipe(process.stdout) // i can see my data in console

    })
    res.send(anyData); // THIS DONT SEND MY DATA, sorry;)
} catch (e) {
    console.error(e.message);
}
});

标签: javascriptnode.jsjsonreactjsstream

解决方案


您当前的代码将结果通过管道传输到控制台:

stream.pipe(JSONStream.stringify()).pipe(process.stdout);

您必须更改代码以将 JSON 字符串传送到 http 响应:

stream.pipe(JSONStream.stringify()).pipe(res);

由于您已将结果流式传输到 http 响应,因此您可以删除此行:

res.send(anyData);

推荐阅读