本文解释为何仅导入 `mongoose` 就导致程序崩溃,并指出根本原因是高版本 mongoose(如 v7.4.1+)依赖 node.js 14+ 的空值合并操作符(`??`),而当前运行环境为 node.js v12.22.1,不支持该语法。解决方案是降级 mongoose 至兼容版本(如 v5.9.20)。
当你在项目中执行 const mongoose = require(‘mongoose’) 却立即报错:
SyntaxError: Unexpected token '?'
at ... node_modules/mongodb/lib/operations/add_user.js:16
这并非代码逻辑错误,而是运行时环境不兼容的典型表现。错误堆栈明确指向 MongoDB 驱动内部使用了 options ?? {} —— 这是 ES2020 引入的空值合并操作符(Nullish Coalescing Operator),Node.js v12.x 完全不支持该语法(该特性自 Node.js v14.0.0 起才被正式引入)。
Mongoose 本身是一个封装层,其底层重度依赖 mongodb 官方驱动。从 Mongoose v6.x 起,默认要求 Node.js ≥ 12.22.0(仅基础支持)且强烈推荐 ≥ 14.0.0;而 Mongoose v7.x 已完全放弃对 Node.js v12 的兼容,强制要求 Node.js ≥ 14.20.0 或 ≥ 16.20.0(详见 Mongoose 官方发布说明)。你使用的 mongoose: “^7.4.1” 正属于此范畴,因此即使尚未调用任何数据库方法,仅加载模块就会触发底层驱动的语法解析失败。
✅ 正确解决方式如下:
-
检查当前 Node.js 版本: