不是函数

我尝试要求一个文件,然后将其传递给一个 var。我正在遵循 这个教程来创建一个身份验证系统。在编写 server.js 文件并尝试编译之后,我得到了一个 BSON 错误,因此我更改了需要用 monose 发布版本的行。

下面是我的代码和错误:

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);的结果

215146 次浏览

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

对我来说,这是一个与循环依赖性有关的问题。

模块 A 要求模块 B,模块 B 要求模块 A。

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

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

记住输出你的 routes.js

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

exports = function(app, passport) {


/* write here your code */


}

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

错误:

const fs = require('fs')


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

好:

const fs = require('fs');


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

对我来说,当我在不同的分支之间切换的时候,我也得到了类似的错误-一个使用了新版本的 @google-cloud/datastore包,它返回带有 Datastore 构造函数的对象作为导出对象的属性之一,我切换到另一个分支执行任务,那里使用了一个旧版本的 Datastore,它将 Datastore 构造函数“直接”导出为 module.exports值。我得到了这个错误,因为 node _ module 仍然有新的模块被我切换到的分支所使用。

我也经历过这种事。 在路由文件中,将函数导出为如下对象:

 module.exports = {
hbd: handlebar
}

在应用程序文件中,您可以通过. hbd 访问该函数 没有问题... !

在我的例子中,当我将 S 放入模块.export 中时,

之前:

module.export = () => {}

之后:

module.exports = () => {}

我不知道怎么回事,但也许在我换衣服的时候就修好了

require('./routes')(app)

require('./routes')