나는 파일을 요구하고 나중에 그것을 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')
함수가 아니라 빈 개체입니다.
답변
나에게는 분기간에 전환 할 때 비슷한 오류가 발생 @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 기능으로 감싸십시오.