SQL 当结果太大时,使用 knex 的服务器查询会导致 Nuxt 应用程序崩溃

SQL Server query using knex crashes Nuxt app when results size is too large

在 Nuxt 应用程序中使用 knex 查询托管在 Azure 上的 SQL 服务器数据库。当查询具有 ~150k 行的特定 table 时,应用程序崩溃但确实打印了 returned 结果的长度。当查询较小的 table ~2k 行时,没有问题。

我可以从单个查询中 return 获取多少数据有限制吗?我需要能够 return 跨多个 table 的大约 100 万行数据,以便我可以聚合和显示使用原始 table 数据完成的一些计算。

我认为数据量占用太多内存是可以理解的,但我想知道是否有解决return大量行w/o问题的方法。

api/routes/tickets.js

const { Router } = require('express');
const router = Router();
const knex_db = require('knex')({
    client: 'mssql',
    connection: {
        host: 'mydb.database.windows.net',
        user: 'user',
        password: 'secret',
        port: 1433,
        options: {
            database: 'mydatabase',
            encrypt: true
        }
    }
});

router.get('/tickets/all', async function(req, res) {

    const results = await knex_db('dbo.tickets');
    console.log('results.length: ' + results.length);
    res.json({data: results});
})

module.exports = router;

api/index.js

const express = require('express');

const app = express();

const tickets = require('./routes/tickets');

app.use(tickets);

module.exports = {
    path: '/api',
    handler: app
}

pages/setup/index.vue

<script>
    export default {
        async asyncData ({ $axios }) {
            const data = (await $axios.$get('/api/tickets/all')).data;
            // console.log(data);
            return { tickets: data }
        }
    }
</script>

我能够通过更改我的代码来解决这个问题

res.json(...)

res.status(200).json(...)

出于某种原因 res.json 一定是造成了内存泄漏或类似的问题。