2016-04-25 60 views
3

我正在学习node.js,并且需要使用readline作为项目。我有以下代码直接从readline module exampleNode.js 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

你正在使用什么版本的节点?可能是不支持ES6箭头语法的。 – Tushar

+1

升级你的节点 – DININDU

+0

由于你的问题似乎已经解决,如果你能接受最好的答案,那将是非常好的。 – CherryDT

回答

8

Arrow functions,的ECMAScript 6 standard的新功能之一,被面市的T node.js(作为稳定功能)仅限于version 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变量的行为不同。这个例子并不重要,但可能在其他例子中。)

+0

谢谢!这解决了问题。对不起,我没有足够的信誉来upvote。我在Windows上,版本号是0.12.2,与4.0.0相比,它看起来很老。但我似乎无法通过npm升级它(我在Windows上并使用命令“npm install -g n”)。这是为什么? – user3700129

+0

我也有麻烦升级使用npm本身在旧版本,我不知道是什么造成了它,但我刚刚下载[最新版本从node.js网站](https://nodejs.org/en/download /)并安装它。 (同时,我转而使用[巧克力](https://chocolatey.org/),这是一个很好的Windows包管理器,在这里输入'cup nodejs.install'来升级节点。) – CherryDT

+0

I只是通过choco安装它。它非常完美! – user3700129

0

=>语法,被称为Arrow功能,是一个相对较新的功能JavaScript的。您将需要一个类似的新版本的节点来利用它。