关于javascript:NodeJs:TypeError:require(…)不是函数

NodeJs : TypeError: require(…) is not a function

我试图要求一个文件,然后将其传递给var。 我正在按照本教程创建身份验证系统。 编写server.js文件并尝试编译后,出现bson错误,因此我更改了需要它的发行版本的猫鼬代码。

这是我的代码和错误:

server.js

1
    require('./app/routes')(app, passport);

错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
require('./app/routes')(app, passport);
                   ^

TypeError: require(...) is not a function
           at Object. (d:\
ode 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);的结果


我认为这意味着未将./app/routes模块中的module.exports分配为函数,因此require('./app/routes')不能解析为函数,因此,您不能将其称为类似require('./app/routes')(app, passport)的函数。

如果您想让我们进一步评论,请显示给我们./app/routes

它看起来应该像这样;

1
2
3
module.exports = function(app, passport) {
    // code here
}

您正在导出一个可以像require('./app/routes')(app, passport)这样调用的函数。

可能发生类似错误的另一个原因是,如果您具有循环模块依赖关系,其中模块A尝试require(B),而模块B尝试require(A)。发生这种情况时,require()子系统将检测到该错误,并且其中一个会以null的形式返回,因此尝试将其作为函数调用将不起作用。在这种情况下,解决方法是删除循环依赖关系,通常是通过将通用代码分解为第三个模块来实现,尽管修复循环依赖关系的细节在每种情况下都是唯一的,但这两个模块都可以分别加载。


对我来说,当我执行立即调用函数时,需要将;放在require()的末尾。

错误:

1
2
3
4
5
const fs = require('fs')

(() => {
  console.log('wow')
})()

好:

1
2
3
4
5
const fs = require('fs');

(() => {
  console.log('wow')
})()


对我来说,这是循环依赖的问题。

IOW,模块A必需的模块B和模块B必需的模块A。

因此,在模块B中,require('./A')是一个空对象,而不是一个函数。

如何处理Node.js中的循环依赖关系


对我来说,在分支之间切换时遇到类似的错误-一个使用较新版本的@google-cloud/datastore包,该包返回带有Datastore构造函数的对象作为导出对象的属性之一,而我又切换到另一分支来执行一项任务,在那里使用了较旧的数据存储版本,该数据存储将"直接"将数据存储构造函数导出为module.exports值。我收到错误消息是因为node_modules仍然有我切换过来的分支使用的较新模块。


只需在需要文件的地方包裹箭头功能


记住要导出您的routes.js

routes.js中,在此功能模块中编写路由和所有代码:

1
2
3
4
5
exports = function(app, passport) {

/* write here your code */

}