Javascript NodeJs:TypeError:require(…)不是函数

Javascript NodeJs:TypeError:require(…)不是函数,javascript,node.js,require,Javascript,Node.js,Require,我试图需要一个文件,然后将其传递给var。我将按照教程创建一个身份验证系统。在编写server.js文件并尝试编译之后,我遇到了一个bson错误,因此我更改了mongoose中要求发布版本的行 以下是我的代码和错误: server.js 错误 require('./app/routes')(app,passport); ^ TypeError:require(…)不是函数 反对。是console.log(require)的结果我认为这意味着您的/app/routes模块中的module.expo

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

以下是我的代码和错误:

server.js

错误

require('./app/routes')(app,passport);
^
TypeError:require(…)不是函数

反对。是
console.log(require)的结果

我认为这意味着您的
/app/routes
模块中的
module.exports
未被分配为函数,因此
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
,因此尝试将其作为函数调用将不起作用。这种情况下的修复方法是删除循环依赖项,通常是将通用代码分解成第三个模块,这两个模块都可以单独加载,尽管修复循环依赖项的细节在每种情况下都是唯一的。

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

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

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


记得导出你的
routes.js

routes.js
中,将您的路线和所有代码写入此功能模块:

exports = function(app, passport) {

/* write here your code */ 

}

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

错误:

const fs = require('fs')

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


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

只需在需要文件的地方使用箭头函数即可。

我也遇到过类似的问题。 在routes文件中,将函数导出为如下所示的对象:

 module.exports = {
     hbd: handlebar
 }
在应用程序文件中,您可以通过.hbd访问该功能
而且没有问题

在我的例子中,当我将S放入module.exportS

之前:

module.export = () => {}
之后:

module.exports = () => {}

您能在出现故障的线路之前
console.log(require)
吗?服务器端不需要requireJS,node.js内置了一个模块系统(CommonJS,也使用
require
函数)。似乎有什么东西正在改变全局
require
变量。这也是我的问题!问题是,在这种情况下,运行时忽略了空格,因此您似乎将函数体
()=>{}
作为参数传递给
require(…)
返回的任何内容。可怕的!是的,在“JS中的分号”辩论中,这是一个支持分号的好论点。幸运的是,分号的缺失似乎只是iife的问题,iife已经过时了哦,天哪!!我来自《木偶演员》
,几乎要求在那里发行,直到我在这里找到一个。呸。。。从来没有想过
会给我带来很多麻烦。很好的解决方案!请注意,实际上应该将分号放在每个自调用函数之前。我修改了这个结构:
;(()=>{})(
如果代码在库中,有哪些选项?我有一个node_模块库(node mailjet),它根本不使用分号。我可以在本地使用Webpack ok进行构建,但当我在Docker上构建时,它会出现以下错误:(如果您能向我们展示一些如何执行您所说的操作的代码,那就太好了:
module.exports.functionName=函数functionName(app,passport){…}
@Magne-但是OP正在尝试执行
要求('./app/routes')(app,passport)
这将无法以您显示导出的方式工作。是的,我的不好。我的用例略有不同。我想导出一个命名函数。
 module.exports = {
     hbd: handlebar
 }
module.export = () => {}
module.exports = () => {}