You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下Node.js调用db.all()时进程异常退出问题

问题描述

我新建文件夹并安装了Node.js版DuckDB,当前Node.js版本为v20.12.2。执行测试代码时,调用db.all()后进程直接退出,从未打印‘here’,但该代码在搭载Node.js 18.x的Amazon Linux环境下运行正常。

测试代码

const token = "TOKEN";
const duckdb = require('duckdb');
async function test() {
  try {
    const db = new duckdb.Database('md:?motherduck_token=' + token);
    const result = await new Promise((resolve, reject) => {
    console.log('pre all');
      db.all('SELECT 42 AS fortytwo', function(err, res) {
        console.log('here', err);
        if (err) {
          reject(err);
        } else {
          resolve(res);
        }
      });
    });
    console.log('result', result);
  } catch (error) {
    console.error('Error', error);
  }
}

test();

依赖版本信息

"node_modules/duckdb": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/duckdb/-/duckdb-1.0.0.tgz",
      "integrity": "sha512-QwpcIeN42A2lL19S70mUFibZgRcEcZpCkKHdzDgecHaYZhXj3+1i2cxSDyAk/RVg5CYnqj1Dp4jAuN4cc80udA==",
      "hasInstallScript": true,
      "dependencies": {
        "@mapbox/node-pre-gyp": "^1.0.0",
        "node-addon-api": "^7.0.0",
        "node-gyp": "^9.3.0"
      }
    },
    "node_modules/duckdb-async": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/duckdb-async/-/duckdb-async-1.0.0.tgz",
      "integrity": "sha512-1UTAZ2LVk9s4NPMiLnB9L2DI716I/LqtDYL8I7RFEP981/fo0SaqcRQFwtgPPz8MyEPcx8QPPmAWEsal5q68xQ==",
      "dependencies": {
        "duckdb": "1.0.0"
      }
    },
解决方案
  • 升级DuckDB版本:当前使用的DuckDB 1.0.0对Node.js 20兼容性不足,后续版本已修复相关适配问题。执行命令升级到最新稳定版:
    npm update duckdb duckdb-async
    
  • 改用官方异步包:直接使用duckdb-async简化异步逻辑,避免手动封装Promise的潜在问题,修改后代码示例:
    const token = "TOKEN";
    const { Database } = require('duckdb-async');
    
    async function test() {
      try {
        const db = await Database.create('md:?motherduck_token=' + token);
        console.log('pre all');
        const result = await db.all('SELECT 42 AS fortytwo');
        console.log('here');
        console.log('result', result);
      } catch (error) {
        console.error('Error', error);
      }
    }
    
    test();
    
  • 重新验证安装:Node.js 20的二进制架构可能与DuckDB预编译包不匹配,清理后重新安装确保编译无报错:
    rm -rf node_modules package-lock.json
    npm install
    
  • 临时阻止进程退出:若以上方法无效,可添加进程保持逻辑排查是否为异步操作未完成导致的进程退出:
    test().finally(() => {
      process.stdin.pause();
    });
    process.stdin.resume();
    

内容的提问来源于stack exchange,提问作者Bill007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:18:16