我正在使用 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
:
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;
那样暴露,这给了我同样的错误。
如何正确公开重置功能?
答案 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;