意外的令牌* Koa.js

时间:2015-06-30 14:43:42

标签: node.js koa

尝试运行Koa时,我遇到了和声错误。

这是我运行mocha测试后出现的错误,我最后得到了这个错误:

MacBook-Pro$ mocha test
...projects/search-api/node_modules/koa/lib/application.js:179
function *respond(next) {
         ^
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)

enter image description here

这是我的 server.js

'use strict';

var supertestKoa = require('supertest-koa-agent');

var app = module.exports = require('koa')(),
    port = process.env.PORT || 3000;

supertestKoa(app);

app.listen(port, function(){
    console.log('Koa app is listening on port' + port);
});

如果您需要我提供任何其他帮助以解决此问题,请与我们联系。

2 个答案:

答案 0 :(得分:3)

它失败了生成器function*语法。以下是一些解决此问题的方法:

  • 如果您使用的是0.11或更高版本的节点,则需要通过和谐运行来启用es6生成器。通常我会这样做:node --harmony path/to/mocha
  • 或者,你可以升级到io.js,它支持生成器和其他一些es6好东西而不需要运行时标志。
  • 另一种可能性是使用babel转换器运行测试。 babel website有详细说明如何执行此操作(在该页面上查找" mocha")。如果您仍然在0.10或更低的节点上,这可能是您最好的选择,这对节点生成器支持为零。

答案 1 :(得分:0)

这是因为application.js中的function *不是您的节点文件。 function *是ES6(ES2015)http://wiki.ecmascript.org/doku.php?id=harmony%3agenerators中的生成器函数。这是javascript的下一个版本,并非所有版本的browsers / node.js都支持。

这里有几个选项可以将该文件转发回ES5,以便browsers / node.js可以理解它。您还可以使用babel之类的代码将代码转换回ES5。您还可以在节点中设置--harmony标志,以便节点了解并利用生成器功能。