【问题标题】:How to send CSV data from Neo4j query results through Node.js/AdonisJs如何通过 Node.js/AdonisJs 从 Neo4j 查询结果发送 CSV 数据
【发布时间】:2021-06-09 16:39:32
【问题描述】:

目前,我有一些代码从Neo4j 数据库查询然后写入服务器上的 CSV 文件:

const session = driver.session();
const query = '<my query>';
var file = fs.createWriteStream('export.csv');
file.write('<some CSV header here');
await new Promise((resolve, reject) => {
  session.run(query).subscribe({
    onNext: i => {
      file.write('<data of record i>');
    },
    onCompleted: () => {
      session.close()
      file.end()
      resolve()
    },
    onError: error => {
      console.log(error)
      reject()
    }
  })
})
return response.download('export.csv');

到目前为止一切都很好,因为数据库中有更多数据,因此写入 CSV 文件的过程需要很长时间,然后客户端收到超时错误。

我找到了几个使用pipe() 将流直接发送到客户端的解决方案,但我尝试过但失败了,因为session.run() 的结果是一个可观察的非流。有没有其他办法?

注意:我使用 AdonisJs 作为后端

【问题讨论】:

    标签: javascript node.js csv neo4j adonis.js


    【解决方案1】:

    您可以像这样直接将数据写入响应中:

    const session = driver.session();
    const query = '<my query>';
    response.response.writeHead(200, {
      'Content-Type': 'application/csv',
      'Content-Disposition': 'attachment; filename="export.csv"'
    });
    response.response.write('<some CSV header here');
    await new Promise((resolve, reject) => {
      const results = session.run(query).subscribe({
        onNext: i => {
          response.response.write('<data of record i>');
        },
        onCompleted: () => {
          session.close()
          response.response.end()
          resolve()
        },
        onError: error => {
          console.log(error)
          reject()
        }
      })
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-12
      • 2019-10-29
      • 1970-01-01
      • 2017-03-11
      • 2011-04-30
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多