Node.JS undefined不是所需模块的函数

ter*_*pak 2 javascript node.js express

我正在尝试使用我创建的一个名为user.js的类.该用户的代码是:

function User(){};

User.prototype.addUser = function(){
    //Do stuff
    return 0;
};

module.exports = User;
Run Code Online (Sandbox Code Playgroud)

我将它包含在我的index.js路由文件中,如下所示:

var config = require('../lib/config');
var db = require('../lib/db');
var User = require('../lib/user');
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');

/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('index', { title: 'Express' });
});

/* GET create user. */
router.get('/newuser', function(req, res, next) {
    *****var newuser = User.addUser();*****

    res.render('index', {   
                        user: newuser
                    });
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

但是,当我访问localhost/newuser时,我收到以下错误:TypeError: undefined is not a function.在我用上面标有5个星号的行上的index.js中抛出此错误.

jfr*_*d00 6

您正在定义一个名为User()并导出它的构造函数.但是,当你require('../lib/user'),你得到构造函数,但你永远不会用它构造一个新对象,所以你实际上没有一个类型的对象User,你只有构造函数,因此构造函数上没有方法addUser().

而不是这个:

var User = require('../lib/user');
Run Code Online (Sandbox Code Playgroud)

你可以像这样调用构造函数:

var u = require('../lib/user');
var User = new u();
Run Code Online (Sandbox Code Playgroud)

或者,如果您永远不需要制作另一个,您可以在一行中完成所有操作:

var User = new (require('../lib/user'))();
Run Code Online (Sandbox Code Playgroud)