Node.js readline: Unexpected token =>
Asked Answered
W

5

10

I am learning node.js and need to use readline for a project. I have the following code directly from the readline module example.

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();
});

But when I run the code via node try.js command, it keeps giving out the errors like below:

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
Warlord answered 25/4, 2016 at 14:32 Comment(2)
What version of node you're using? Possibly the one that doesn't support ES6 arrow syntax.Drawback
@CherryDT Just did. Sorry, new to the communityWarlord
W
20

Arrow functions, one of the new features of the ECMAScript 6 standard, were introduced to node.js (as stable feature) only in version 4.0.0.

You can either upgrade your node.js version or use the old syntax, which would look like this:

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();
});

(Note that there is one more difference between those syntaxes: The this variable behaves differently. It doesn't matter for this example, but it may in others.)

Waste answered 25/4, 2016 at 14:39 Comment(3)
Thank you! That solved the problem. Sorry I don't have enough reputation to upvote. I am on windows and the version number is 0.12.2, which seems really old compared to 4.0.0. But I can't seem to upgrade it through npm (I am on Windows and used the command "npm install -g n"). Why is that?Warlord
I also had troubles upgrading using npm itself in older versions, I'm not sure what caused it, but I then just downloaded the latest version from the node.js website and installed it. (And in the meantime, I switched to using Chocolatey, a nice package manager for Windows, where it's a matter of typing cup nodejs.install to upgrade node.)Waste
I just installed it through choco. It worked perfectly!Warlord
A
3

Upgrade your node version.

Arrow functions now work in node (version 4.0.0) see here: ECMAScript 2015 (ES6) in Node.js

Check to see which version you are running with node -v

You likely need to upgrade check out the compatibility table here to see what else is available:

Node Compatibility Table

Alisiaalison answered 25/4, 2016 at 14:38 Comment(0)
T
1

For people who already upgraded node and are running into the same error: For me, this error was coming from eslint. I was using node 14 in my package.json:

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

But only got rid of the error after updating the linter .eslintrc.js config to the following:

  "parserOptions": {
    "ecmaVersion": 8,
    "ecmaFeatures": {
      "experimentalObjectRestSpread": true,
      "jsx": true,
    },
    "sourceType": "module",
  },
Thigmotropism answered 20/12, 2021 at 11:45 Comment(0)
L
0

The => syntax, known as an Arrow Function, is a relatively new feature of JavaScript. You'll need a similarly new version of Node to take advantage of it.

Lovett answered 25/4, 2016 at 14:36 Comment(0)
A
0

Change your "es" version from 6 to 7. For this go to your functions**>**.eslintrc.js file.

Change "es6:true" to "es7:true".

enter image description here

Actually, "=>" is an element of es7 and therefore throws error on es6.

Assam answered 7/12, 2022 at 20:32 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.