有没有办法将 csv 从 mysql 直接流式传输到我的下载路线,这样就不需要在两者之间存储 csv?

问题描述

这里是 dlstream.js

const express = require('express')
const app = express.Router()
app.get('/',(req,res) => {
    let id = req.query.id
    if(!id || String(id).length === 0) return res.redirect('/404')
    let gen = ((String(req.query.gen) !== "1") && (String(req.query.gen) !== "2")) ? "1" : req.query.gen
    let dup = ((req.query.dup !== "true") && (req.query.dup !== "false")) ? "true" : req.query.dup
    let sql
    if(gen === "1") {
          if(dup === "true") {
              sql = req.sql.gen1.dup(id)
          } else {
              sql = req.sql.gen1.nodup(id)
          } 
    } else {
          if(dup === "true") {
              sql = req.sql.gen2.dup(id)
          } else {
              sql = req.sql.gen2.nodup(id)
          }
    }

let pool = req.MysqL.createPool({ 连接限制:1000, 连接超时:60 * 60 * 1000, accquireTimeout: 60 * 60 * 1000,超时:60 * 60 * 1000, 主机:req.config.MysqL.host, 用户:req.config.MysqL.user, 密码:req.config.MysqL.password, 数据库:req.config.MysqL.database, 端口:req.config.port }) pool.getConnection((err,con) => { 如果(错误){ 控制台错误错误) 返回 res.redirect('/500') } 别的 { 让 csvStream = req.csv.createWriteStream({ 标题:真实 }) res.setHeader('Content-disposition',attachment; filename=id-${id}-gen-${gen}-dup-${dup}.csv) res.setHeader('内容类型','text/csv') csvStream.pipe(res) 让 sqlc = req.con.query(sql) .on('result',(row) => { csvStream.write(行) }) .on('end',() => { csvStream.end() con.release(error => error ? reject(error) : resolve()) }) } }) }) module.exports = app

但它吐出这个错误信息

Error: Handshake inactivity timeout

有什么遗漏了吗? 还有更多关于错误的信息,但它不会让我在这里发布。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)