簡體   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