如何使用CommonJS方式正确导入

时间:2016-11-28 15:09:47

标签: javascript express commonjs

我对如何在一个名为 util.js 的文件中导入一个简单地反转字符串的函数感到困惑

function reverseString(str) {
    var reversed = " ";
    for (var i = str.length - 1; i >= 0; i--) {
        reversed += str[i];
    }
    return reversed;
}
module.exports.reverseString = reverseString;

我想在另一个文件中访问它,这个名为 server.js

这是我到目前为止所做的。

var util = require('./util');

util.reverseString();




var reversed = reverseString(req.body);
res.send(reversed);
} else {
res.status(400).end()
}
});

我正在使用邮递员来检查节点模块,但是当我运行它时,我得到了

TypeError: Cannot read property 'length' of undefined

我知道反向代码有效,因为我之前测试过,所以我认为我的导入是错误的。但任何有助于解决这个问题的帮助都会很棒。

3 个答案:

答案 0 :(得分:2)

reverseString函数期望一个类型为string的参数(也可能是数组)和你在迭代参数的相同函数。

但是在调用此函数时,您没有传递任何参数,因此str参数设置为undefined。

undefined没有任何长度属性,因此会出现此错误

答案 1 :(得分:1)

(我的答案针对的是ES5。在ES6中还有一些简介,比如默认导出和命名导出)。

您可以使用单一导出:

module.exports = reverseString;

然后:

var reverseString = require('./util');

reverseString("bobba");

//shorthand:
require('./util')("bobba");

或者返回一个名为exports的对象:

module.exports = { reverseString: reverseString };

然后:

var utils = require('./util');
utils.reverseString("bobba");

// shorthand:
require('./util').reverseString("bobba");

答案 2 :(得分:1)

自导入变量后,您需要引用该函数所在的库。

var util = require('./util');

// util.reverseString(); // this does nothing

var req = { body: 'some string' };
var reversed = util.reverseString(req.body); // ref util here