Node.js readline:意外的令牌 =>

10

我正在学习node.js,并需要在一个项目中使用readline。我有以下代码,直接来自readline模块示例

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('What do you think of Node.js? ', (answer) => {
  // TODO: Log the answer in a database
  console.log('Thank you for your valuable feedback:', answer);

  rl.close();
});

但是当我通过node try.js命令运行代码时,它一直会产生以下类似的错误:

rl.question('What is your favorite food?', (answer) => {
                                                    ^^
SyntaxError: Unexpected token =>
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

3
你使用的是哪个版本的Node?可能是不支持ES6箭头语法的那个版本。 - Tushar
@CherryDT 刚刚完成了。抱歉,我是社区的新成员。 - user3700129
5个回答

20
箭头函数ECMAScript 6 标准 的新特性之一。在 node.js 中,这项功能只有在 4.0.0 版本中才被作为稳定特性引入。
你可以升级 node.js 版本,也可以使用旧语法,其写法类似于:
rl.question('What do you think of Node.js? ', function(answer) {
  // TODO: Log the answer in a database
  console.log('Thank you for your valuable feedback:', answer);

  rl.close();
});

(请注意,这些语法之间还有一个区别:变量 this 的行为不同。在这个例子中无关紧要,但在其他情况下可能会有所影响。)

谢谢!问题已解决。很抱歉我没有足够的声望来点赞。我使用的是Windows系统,版本号为0.12.2,与4.0.0相比似乎非常老旧。但是我似乎无法通过npm升级它(我在Windows上使用了命令“npm install -g n”)。这是为什么呢? - user3700129
我之前也遇到过使用旧版本的npm升级时出现问题,不确定是什么原因,但后来我只是从node.js网站下载了最新版本并安装了它。(与此同时,我转而使用Chocolatey,这是一个很好的Windows软件包管理器,在那里只需键入cup nodejs.install即可升级node。) - CherryDT
我刚刚通过 choco 安装了它。它完美地运行了! - user3700129

3

升级您的节点版本。

现在,箭头函数可以在节点(版本4.0.0)中使用,请参见此处:ECMAScript 2015(ES6)在Node.js中

检查您正在运行哪个版本:node -v

您可能需要升级,请查看此处的兼容性表以了解其他内容:

节点兼容性表


1

对于已经升级了node版本并遇到相同错误的人:对我来说,这个错误是由eslint引起的。我在package.json中使用了node 14

  "engines": {
    "node": "14"
  },

只有在更新了代码检查工具的配置文件.eslintrc.js为以下内容后,才能消除错误:

  "parserOptions": {
    "ecmaVersion": 8,
    "ecmaFeatures": {
      "experimentalObjectRestSpread": true,
      "jsx": true,
    },
    "sourceType": "module",
  },

0

=> 语法被称为箭头函数,是 JavaScript 的一个相对较新的特性。您需要使用同样新的 Node 版本来充分利用它。


0

将你的 "es" 版本从 6 更改为 7。 为此,前往您的功能**>**.eslintrc.js 文件。

"es6:true" 更改为 "es7:true"

enter image description here

实际上,"=>" 是 es7 的一个元素,因此在 es6 上会引发错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接