Sails.js 1.x环境PostgreSQL原生查询报错求助
解决Sails.js 1.x中PostgreSQL原生查询因machine v15版本冲突报错的问题
从错误信息来看,核心问题是machine v15移除了对switchback回调字典的支持,而你升级Node.js 9后,依赖包被自动更新到了这个版本,导致原本兼容的代码出现冲突。以下是几个可行的解决思路:
1. 回退machine相关依赖版本
既然问题是machine v15的变更导致的,最直接的方法是锁定低于v15的machine版本:
- 打开
package.json,如果使用yarn可以添加resolutions字段,或者用npm-force-resolutions工具,强制指定machine版本为^14.0.0(v15之前的稳定版)。 - 也可以直接锁定
sails-hook-orm和machinepack-postgresql的兼容版本,比如查找这两个包在machine v15发布前的最新稳定版,在package.json中明确指定,示例:"dependencies": { "sails-hook-orm": "^2.1.1", "machinepack-postgresql": "^5.0.0" } - 删除
node_modules和package-lock.json(或yarn.lock),重新执行npm install(或yarn install)。
2. 调整代码适配machine v15的要求
如果不想降级依赖,可以按照错误提示调整回调方式:
- 若继续使用回调风格,确保第二个参数是标准的
(err, result)函数,而非switchback字典:sails.getDatastore().sendNativeQuery('SELECT COUNT(*) FROM "user"', function(err, result) { if (err) { console.error('查询出错:', err); return; } console.log('查询结果:', result); }); - 若偏好Promise风格,检查你的
sails-hook-orm版本是否支持machine v15的Promise适配。如果版本过旧,尝试升级sails-hook-orm到最新兼容版后再测试。
3. 回退Node.js版本
Node.js 9属于非稳定开发版(奇数版本为迭代开发版),可能和Sails.js 1.x的依赖存在兼容性问题。你可以回退到之前正常运行的Node.js长期支持版(比如Node.js 8或10),验证问题是否消失。
4. 清理并重新安装依赖
有时依赖缓存或版本锁定文件会导致隐性版本冲突,尝试以下步骤:
- 删除项目根目录下的
node_modules文件夹 - 删除
package-lock.json(npm)或yarn.lock(yarn) - 执行
npm install或yarn install重新安装所有依赖
内容的提问来源于stack exchange,提问作者Patrick Narkinsky
相关产品推荐
相关产品推荐

