2015-07-23 5 views
0

В моем проекте Node.js я пытаюсь импортировать модуль вспомогательных функций. Я получаю эту ошибку:SyntaxError: Неожиданный идентификатор с импортированным модулем Node.js

/home/Projects/my_app/helpers.js:3 
    var randomWeight = function(letters) { 
     ^^^^^^^^^^^^ // <-- SyntaxError: Unexpected identifier with imported module Node.js 
SyntaxError: Unexpected identifier 

helpers.js:

module.exports = { 

    function randomWeight (letters) { 
     var total = letters.reduce(function (a, b) { 
         return a + b; 
        }); 
     var r = (Math.random() * (0 - total) + total.tofixed(5)); 
     var upto = 0; 
     for (var i = 0; i<=letters.length; i++) { 
      if ((upto + letters[i][0]) > r) { 
       return letters[i][1]; 
      }; 
      upto += letters[i][0]; 
     }; 
    } 

/routes/index.js:

var express = require('express'); 
var router = express.Router(); 
var logic = require('../logic.js'); 
console.log(logic.letterSet) 

Я пробовал много разных вариаций оператора импорта, в результате чего модуль импортируется как пустой объект. Из поиска SO это обычно происходит из-за циклического импорта, но я уверен, что я не импортирую файл logic.js где-нибудь еще в моем проекте (в частности, /server.js.) Я новичок в узле, поэтому устранение неполадок было выполнено как стрельба в темноте.

EDIT:

Я, кажется, решить эту проблему путем импорта соответствующих функций по отдельности, как:

exports.letterSet = letterSet; 
exports.randomWeight = randomWeight; 

, но я не совсем понимаю, как/почему я не могу импортировать весь модуль. Извините, если это кажется смешным вопросом, но я привык к python, где импорт модулей тривиален.

+0

вместо того, чтобы просто разместить кучу кода, попытаться объяснить некоторые вещи, которые вы уже пробовали, а также некоторый контекст для вашего кода. – Oxcug

+0

Ваш код не соответствует сообщению об ошибке. Кодовый блок 'helper.js' недопустим. Возможно, вы имели в виду 'module.exports = {randomWeight: function (letters) {...}};' –

+0

Думаю, я вижу, что происходит. Я прочитал, что module.exports = {} был специфическим синтаксисом Node.js для экспорта модуля, считая, что я могу обернуть в него модуль, не имея на самом деле быть синтаксически правильным объектом ... затем снова, имея module.exports = function() {} приводит к той же ошибке. –

ответ

1

вы возвращаете объект {} в modules.exports, так что вам нужно использовать объект обозначения

module.exports = { 

    randomWeight: function (letters) { 
     var total = letters.reduce(function (a, b) { 
         return a + b; 
        }); 
     var r = (Math.random() * (0 - total) + total.tofixed(5)); 
     var upto = 0; 
     for (var i = 0; i<=letters.length; i++) { 
      if ((upto + letters[i][0]) > r) { 
       return letters[i][1]; 
      }; 
      upto += letters[i][0]; 
     }; 
    } 
Смежные вопросы