Node.js,TypeError:xxx不是函数,在require'd文件

Node.js, TypeError: xxx is not a function, in require'd file

本文关键字:require 文件 TypeError js xxx Node 函数      更新时间:2024-03-20

我有两个文件(例如)。

/database/user.js

module.exports = {
    getUniqueByID: function(params){
        doSomething();
        return anUserObject;
    }
};

/database/uperm.js

var dbUser = require('./user.js');
module.exports = {
    createNew: function(params){
        dbUser.getUniqueByID(uid);
        doSomethingElse();
    }
};

来自uperm.js的函数createNew()总是抛出异常:

.../uperm.js:123
dbUser.getUniqueByID(uid);
TypeError: dbUser.getUniqueByID is not a function

但是,如果我将./database/uperm.js更改为:

module.exports = {
    createNew: function(params){
        require('./user.js').getUniqueByID(uid);
        doSomethingElse();
    }
};

则来自user.jsgetUniqueByID()被来自uperm.jscreateNew()调用,没有任何例外。

但我不想在任何地方都使用require('./user.js'),而不是将其分配给dbUser变量。

在使用变量的情况下有什么问题?我项目的其他文件中完全相似的代码似乎也可以。

由于您有循环依赖关系,请尝试设置module.exports的属性,而不是直接覆盖它:

var functions = {
   getUniqueByID: xxx
};
for(var key in functions) {
    module.exports[key] = functions[key];
}

(根据这个答案中提供的想法)