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

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. 清理并重新安装依赖

有时依赖缓存或版本锁定文件会导致隐性版本冲突,尝试以下步骤:

  1. 删除项目根目录下的node_modules文件夹
  2. 删除package-lock.json(npm)或yarn.lock(yarn)
  3. 执行npm install或yarn install重新安装所有依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:46:25