NodeJs:TypeError:require(…)不是一个函数
我想要一个文件,然后传递给一个变种。 我正在按照这个教程创build一个authentication系统。 在编写server.js文件并尝试编译后,我得到了一个bson错误,因此我改变了需要在mongoose中发布版本的那一行。
这里是我的代码和错误:
server.js
require('./app/routes')(app, passport);
错误
require('./app/routes')(app, passport); ^ TypeError: require(...) is not a function at Object.<anonymous> (d:\Node JS learning\WorkWarV2\server.js:38:24) at Module._compile (module.js:434:26) at Object.Module._extensions..js (module.js:452:10) at Module.load (module.js:355:32) at Function.Module._load (module.js:310:12) at Function.Module.runMain (module.js:475:10) at startup (node.js:117:18) at node.js:951:3 Process finished with exit code 1
我已经读了这通常意味着requireJS没有得到正确加载,但我不知道为什么或如何解决它。
编辑由于评论:
如问, 这里是console.log(require);
的结果console.log(require);
我认为这意味着你的./app/routes
模块中的./app/routes
没有被赋值为一个函数,所以require('./app/routes')
不能parsing为一个函数,所以你不能把它称为像这样的functionrequire('./app/routes')(app, passport)
。
告诉我们./app/routes
是否需要我们进一步评论。
对我来说,这是一个循环依赖的问题。
IOW,模块A需要模块B,模块B需要模块A.
所以在模块B中, require('./A')
是一个空对象,而不是一个函数。
如何处理Node.js中的循环依赖关系
安装autoloader模块解决了我的问题。
npm install autoloader.
并且修改你的代码如下。From: require('autoloader').autoload(__dirname + '/src');
require('autoloader')(__dirname + '/src');
注意:确保模块名称..自动加载,我们有很多模块..
记得导出你的routes.js
。
在routes.js
,将您的路由和所有代码写入此function模块中:
exports = function(app, passport) { /* write here your code */ }