SyntaxError:导入模块Node.js的意外标识符

时间:2015-07-23 03:01:43

标签: javascript node.js

在我的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)

我尝试了很多不同的import语句变体,导致模块被导入为空对象。从搜索SO看起来这通常是因为循环导入,但我确信我没有在我的项目中的任何其他地方导入logic.js(特别是/server.js。)我是Node的新手,所以排除故障排序喜欢在黑暗中拍摄。

编辑:

我似乎通过单独导入适当的函数解决了这个问题,例如:

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

但我不太明白为什么我不能导入整个模块。如果这看起来像一个荒谬的问题,我很抱歉,但我已经习惯了模块导入很简单的python。

1 个答案:

答案 0 :(得分: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];
        };
    }