如何从node.js中的模块导出函数

时间:2015-12-01 08:12:09

标签: javascript node.js express

我正在使用 node.js(v4.2.2) express(4.13.1)。我正在尝试将自定义模块功能导入另一个模块。应用程序是使用express创建的,只有添加到app.js的内容才需要我的路由var tests = require('./routes/tests');和该路由的app.use app.use('/tests', tests);

我的两个自定义文件(模块)是(路径相对于项目根目录):

  • ./ model / test.js
  • ./路由/ tests.js

以下是./model/test.js

var id;
var testNumber1;
var testNumber2;

function Test(id, testNumber1, testNumber2) {
    this.id = id;
    this.testNumber1 = testNumber1;
    this.testNumber2 = testNumber2;
};

exports.reset = function() {
    this.testNumber1 = 0;
    this.testNumber2 = 0;
};

module.exports = Test;

这是./routes/tests.js

var express = require('express');
var Red = require('../model/test.js');
var router = express.Router();

/*create new test :id*/
router.post('/:id', function(req, res, next) {
  var myNewTest = new Red(req.params.id, 0, 0)
  myNewTest.testNumber2 += 1;
  myNewTest.reset();
  res.send('id: ' + myNewTest.id + 
    ' testNumber2: ' + myNewTest.testNumber2);
});

module.exports = router;

当我尝试执行curl -X POST http://localhost:3000/tests/1时,我收到错误TypeError: myNewTest.reset is not a function。我无法理解如何正确导出函数。如果我正确理解了这个api reference,要公开模块的构造函数,我必须使用module.exports = Test;,但这并不会公开reset函数。所以,为了公开它我已经宣布它像exports.reset = function() {...},但很明显,这不起作用,至少在我的情况下不行。

通过其他一些答案,我也看到函数被正常声明function reset() {...},并且像exports.reset = reset;那样暴露,这给了我同样的错误。

如何正确公开重置功能?

1 个答案:

答案 0 :(得分:1)

您应该将它添加到原型中,此时它只是模块中的静态方法,而不是附加到Test构造函数。

function Test(id, testNumber1, testNumber2) {
    this.id = id;
    this.testNumber1 = testNumber1;
    this.testNumber2 = testNumber2;
};

Test.prototype.reset = function() {
    this.testNumber1 = 0;
    this.testNumber2 = 0;
};

module.exports = Test;