请求协助:执行npm start时server.js出现语法错误
解决Node.js中扩展运算符
...引发的SyntaxError问题 嘿,我一眼就看出你遇到的是Node.js版本兼容问题导致的语法错误,咱们来一步步搞定它:
问题根源
你在server.js第59行用了ES6的对象扩展运算符...req.body,但当前运行的Node.js版本(从调用栈里的vm.js、module.js版本能看出来)还不支持这个特性,所以直接抛出了SyntaxError: 意外的令牌 ...错误。
两种可行解决方案
方案1:升级Node.js版本(最推荐)
对象扩展运算符在Node.js v8.3.0及以上 才被默认支持(更早版本需要手动开启实验性特性,稳定性差不推荐)。操作步骤:
- 先查当前Node版本:在终端运行
node -v - 去Node.js官网下载安装最新的LTS长期支持版(稳定性拉满)
- 安装完成后重新执行
npm start,问题应该就解决了
方案2:用Babel转译ES6代码(适合无法升级Node的场景)
如果因为环境限制没法升级Node,就用Babel把ES6代码转译成Node能识别的ES5代码:
- 安装Babel相关依赖:
npm install @babel/core @babel/cli @babel/preset-env @babel/node --save-dev - 在项目根目录创建
.babelrc配置文件,写入:{ "presets": ["@babel/preset-env"] } - 修改
package.json里的start脚本,用babel-node替代原生node:"scripts": { "start": "nodemon --exec babel-node server.js" } - 重新运行
npm start,Babel会自动帮你转译代码,兼容旧版Node
快速验证小技巧
你可以先把报错的代码临时换成ES5写法测试:
// 原来的ES6写法 const friend = { id: getNewId(), ...req.body }; // 换成ES5的Object.assign写法 const friend = Object.assign({ id: getNewId() }, req.body);
如果这样运行不报错,就100%确认是扩展运算符的兼容问题啦。
内容的提问来源于stack exchange,提问作者JohnNgo
相关产品推荐
相关产品推荐

