我正在使用 node.js (v4.2.2) 和 express (4.13.1)。我正在尝试将自定义模块函数导入到另一个模块。应用程序是使用express创建的,只有添加到app.js中的东西是我的路线所需要的vartests = require('./routes/tests');
和该路线的app.use app.use('/tests', 测试);
我的两个自定义文件(模块)是(路径相对于项目根目录):
- ./model/test.js
- ./routes/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;
那样公开,其中给了我同样的错误。
如何正确公开重置功能?
最佳答案
您应该将其添加到原型(prototype)中,目前它只是模块中的静态方法,未附加到 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;
关于javascript - 如何从node.js中的模块导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34015523/