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
相关产品推荐
相关产品推荐

