[javascript] NodeJs : TypeError : require (…)는 함수가 아닙니다.

나는 파일을 요구하고 나중에 그것을 var에 전달하려고합니다. 나는 다음과 같은 오전 인증 시스템을 만들 수있는 튜토리얼. server.js 파일을 작성하고 컴파일을 시도한 후 bson 오류가 발생하여 mongoose에서 릴리스 버전이 필요한 행을 변경했습니다.

내 코드와 오류는 다음과 같습니다.

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);



답변

나는 이것이 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했습니다. 하나는 내 보낸 객체의 속성 중 하나로 Datastore 생성자를 사용하여 객체를 반환 하는 최신 ( “typescriptish”) 버전의 패키지를 사용하고 작업을 위해 다른 분기 인 이전 데이터 저장소 버전으로 전환했습니다. 데이터 저장소 생성자를 module.exports값으로 ‘직접’내보내는 데 사용되었습니다 . node_modules에 내가 전환 한 지점에서 사용하는 최신 모듈이 여전히 있기 때문에 오류가 발생했습니다.


답변

저도 이런 일에 직면했습니다. 경로 파일에서 다음과 같은 객체로 함수를 내 보냅니다.

 module.exports = {
     hbd: handlebar
 }

그리고 앱 파일에서 .hbd로 함수에 액세스 할 수 있으며 ptoblem이 없습니다 ….!


답변

당신을 수출하는 것을 잊지 마십시오 routes.js.

에서 routes.js, 당신의 경로와이 기능 모듈의 모든 코드를 작성 :

exports = function(app, passport) {

/* write here your code */

}


답변

파일이 필요한 곳에 Arrow 기능으로 감싸십시오.