2015-06-30 4 views
2

Я получаю ошибку гармонии при попытке запустить Коа.Неожиданный токен * Koa.js

Здесь ошибка после того, как я провел мои мокко тесты, я получаю эту ошибку в конце:

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

Пусть я знаю, если вам нужно что-нибудь еще от меня, чтобы помочь устранить эту проблему.

ответ

3

Неисправность генератора function* синтаксис. Вот несколько вариантов обойти это:

  • Если вы используете узел 0.11 или новее, вам нужно включить генераторы es6, выполнив с гармонией. Обычно я делаю что-то вроде этого: node --harmony path/to/mocha.
  • В качестве альтернативы вы можете перейти на io.js, который поддерживает генераторы и несколько других полезных свойств es6 без необходимости использования флага времени выполнения.
  • Еще одна возможность запускает тесты с использованием транспондера babel. babel website содержит подробные инструкции, как это сделать (ищите «мокко» на этой странице). Вероятно, это ваш лучший выбор, если вы все еще на узле 0.10 или ниже, у которого есть поддержка генератора нуля.
+0

Вы должны * использовать 0.11 или выше в node.js для работы генераторов. –

+0

Транспортеры должны позволить генераторам работать на старых двигателях (см. Мой последний пуля). – greim

+0

Вы всегда можете делать все в программировании, но вопрос в том, что является наиболее целесообразным для пользователя! –

0

Это из-за function * в application.js не файл вашего узла. function * - функция генератора в ES6 (ES2015) http://wiki.ecmascript.org/doku.php?id=harmony%3agenerators. Это следующая версия javascript, которую еще не поддерживает версия браузера/node.js.

Есть несколько вариантов здесь, вы можете передать этот файл обратно на ES5, чтобы браузеры/node.js могли его понять. Вы также можете использовать что-то вроде babel, чтобы перевести код обратно на ES5. Вы также можете установить флаг --harmony в узел, который позволит узлу понять и использовать функцию генератора.

+0

Нет, вам не нужно переводить, вам просто нужен флаг '--harmony'. Конечно, вы можете перевести, если хотите. –

+0

Хорошая точка и выбор слов. Я изменю вам CAN :) – blackmind

Смежные вопросы