SyntaxError:在koa中使用async和babel的意外标记

时间:2015-11-20 15:50:11

标签: javascript node.js asynchronous ecmascript-6 babeljs

我使用Koa的最后一个alpha版本制作了这个简单的应用程序。为了使用`async / wait Babel.Js是必需的。

'use strict';

// babel registration (runtime transpilation for node)
require('./server.babel');

const Koa = require('koa');
const app = new Koa();

// define logger - this will be always executed
const logger = async (context, next) => {
  const start = new Date;
  await next();
  const ms = new Date - start;
  console.log(`${context.method} ${context.url} - ${ms}ms`);
}

const index = (context) => {
  context.body = 'Hello World';
}

app.use(logger);
app.use(index);

app.listen(3000);
console.info(`The app is listening on port 3000`);

这是激活转换的钩子。

const fs = require('fs');

let config;

try {
  config = JSON.parse(fs.readFileSync('./.babelrc'));
} catch (error) {
  console.error('==>  ERROR: Error parsing your .babelrc.');
  console.error(error);
}

require('babel-core/register')(config);

这是配置文件:

{
  "plugins": ["transform-async-to-generator"]
}

不幸的是,当我尝试运行项目时,我收到以下错误:

const logger = async (context, next) => {
                 ^

SyntaxError: Unexpected token (
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:404:25)
    at Object.Module._extensions..js (module.js:432:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:313:12)
    at Function.Module.runMain (module.js:457:10)
    at startup (node.js:138:18)
    at node.js:974:3

我不知道为什么会收到此错误。我使用的是最后一个Node.Js版本5.1.0和Babel 6.2.1

2 个答案:

答案 0 :(得分:4)

您正在获得SyntaxError。之所以发生这种情况,是因为在Babel拦截并转换之前,您的代码正在被解析。

如果你想让异步函数在你的第一个文件中起作用,你应该在注册了它之后require整个文件。

使用以下

创建新文件start.js
require('babel-register');
require('./index');

index.js中的代码可以使用异步功能,但您无法在start.js中执行此操作。

另请注意,您不需要自己阅读.babelrc。 Babel默认会为你做这件事。

.babelrc的内容如下所示

{
  "presets": [
    "es2015",
    "stage-3"
  ],
  "plugins": [
    [
      "transform-runtime",
      {
        "polyfill": false,
        "regenerator": true
      }
    ]
  ]
}

参考链接

答案 1 :(得分:0)

将nodejs版本升级到v7.6.0或更高版本