繁体   English   中英

NodeJs: TypeError: require(...) 不是 function

[英]NodeJs : TypeError: require(...) is not a function

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

这是我的代码和错误:

服务器.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);的结果

我认为,这意味着module.exports./app/routes模块没有分配是一个函数等于是require('./app/routes')不能解决的功能,所以因此,你不能把它作为一个像这样的功能require('./app/routes')(app, passport)

如果您希望我们对此进行进一步评论,请向我们展示./app/routes

它应该看起来像这样;

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

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


可能发生类似错误的另一个原因是,如果您有一个循环模块依赖关系,其中模块 A 尝试require(B)而模块 B 尝试require(A) 当这种情况发生时,它会被require()子系统检测到,其中一个将返回为null ,因此尝试将其作为函数调用将不起作用。 在这种情况下,解决方法是消除循环依赖,通常是将公共代码分解为第三个模块,这两个模块都可以单独加载,尽管修复循环依赖的细节对于每种情况都是独一无二的。

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

错误:

const fs = require('fs')

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

好的:

const fs = require('fs');

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

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

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

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

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

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

记得导出你的routes.js

routes.js ,在这个函数模块中编写你的路由和所有代码:

exports = function(app, passport) {

/* write here your code */ 

}

只需在需要文件的地方包装 Arrow 函数

我也遇到过这样的事情。 在您的路由文件中,将函数导出为这样的对象:

 module.exports = {
     hbd: handlebar
 }

并且在您的应用程序文件中,您可以通过 .hbd 访问该功能,并且没有 ptoblem ....!

在我的情况下,当我将 S 放入 module.exportS 时,我会修复,

前:

module.export = () => {}

后:

module.exports = () => {}

我不知道如何,但在可能的情况下,当我改变时它会得到修复

require('./routes')(app)

require('./routes')

在我的情况下,当我把 ( ; ) 放在最后时,我会修复它。

前:

const got = require('got')

后:

const got = require('got');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM