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

标签 javascript node.js express

我正在使用 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/

相关文章:

forms - 如何在 Express (NodeJS) 中验证和处理表单

javascript - 如何使用codebird.js 搜索twitter API 来匹配用户?

javascript - 'NextHandleFunction' 类型的参数不可分配给 'PathParams' 类型的参数

node.js - 从 Node.js 和 Typescript 中的动态文件名加载 JSON 的最佳方法是什么?

javascript - Nodejs node-schedule npm 抛出错误 "this.job.execute is not a function"

javascript - NginX 代理 Nodejs/Express - 静态文件上的 404

javascript - 对象键错误 key.join 不是函数

javascript - 将 10 秒添加到日期

javascript - 本地通知插件仅在index.html中工作 - 无法读取未定义的属性 'notification'

node.js - npm 安装卡在 "normalizeTree: http request GET https://registry.npmjs.o"