NodeJs:TypeError:require(...)不是函数

tai*_*100 63 javascript require node.js

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

这是我的代码和错误:

server.js

    require('./app/routes')(app, passport);
Run Code Online (Sandbox Code Playgroud)

错误

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
Run Code Online (Sandbox Code Playgroud)

我已经读过,这通常意味着requireJS没有正确加载,但我不知道为什么或如何解决它.

由于评论而编辑:

如上所述,是结果console.log(require);

jfr*_*d00 82

我认为这意味着module.exports在你的./app/routes模块中没有被分配为一个函数因此因此require('./app/routes')不能解析为函数,所以你不能把它称为这样的函数require('./app/routes')(app, passport).

让我们看看./app/routes,如果你希望我们对进一步的评论.

看起来应该是这样的;

module.exports = function(app, passport) {
    // code here
}
Run Code Online (Sandbox Code Playgroud)

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


可能发生类似错误的另一个原因是,如果您有模块A正在尝试的循环模块依赖性,require(B)而模块B正在尝试require(A).当发生这种情况时,它将被require()子系统检测到,其中一个将返回null,因此试图调用它作为一个功能将不起作用.在这种情况下的修复是删除循环依赖,通常是通过将公共代码分成第三个模块,两个都可以单独加载,虽然修复循环依赖的细节对于每种情况都是唯一的.


mCY*_*mCY 21

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

错误:

const fs = require('fs')

(() => {
  console.log('wow')
})()
Run Code Online (Sandbox Code Playgroud)

好:

const fs = require('fs');

(() => {
  console.log('wow')
})()
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案!请注意,实际上您应该在每个自调用函数之前添加分号。我改编了这个结构:`;(() =&gt; {})()` (5认同)
  • 这也是我的问题!问题实际上是在这种情况下运行时会忽略空格,因此看来您正在将函数体`()=&gt; {}`作为参数传递给`require(...)`返回的内容。可怕! (4认同)
  • 我的天啊!!我来自“puppeteer”,几乎在那里提出了一个问题,直到我在这里找到了一个。唷……没想到`;`会让我这么麻烦。 (2认同)

Bry*_*sen 10

对我来说,这是一个循环依赖的问题.

IOW,模块A需要模块B,模块B需要模块A.

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

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