2016-08-30 3 views
0

코드를 두 번 실행해야하는 데 문제가 있습니다. 표준 익스프레스 앱을 사용하여 Mongoose Schemas를 만들고 각 파일은 자체 파일로 내보내고 내보낼 수 있습니다. 노드가 몽구스 스키마에 코드를 두 번 실행합니다.

//user.js 
const User = mongoose.model('User', userSchema) 
module.exports = User 

//In other files 
const User = require('../models/User') 

지금 내 응용 프로그램에서 두 곳에서이 사용하고 지금 모델을 만드는 유일한 코드로

Cannot overwrite `User` model once compiled. 

그래서 위의 코드는 두 번 호출지고 없다는 오류가 발생합니다. 그러나 노드에서 내 코드에서 필요하기 때문에 한 번만 실행하면됩니다.

정말 이상한 부분은 Git의 이전 버전을 체크 아웃하는 것과 동일한 오류가 발생하고 이에 대해 저와 함께 일하는 사람들이 같은 오류가 발생한다는 것입니다. 그래서 솔루션을 찾을 곳이 더 이상 없습니다.

+0

user.js'console.log (module.parent)'의 시작 부분에 글을 쓰십시오. 이렇게하면 누가 전화했는지 알 수 있습니다. –

+0

이것은 일어나지 않아야합니다. 이미'require()'된 파일은 다시 실행되지 않습니다. – robertklep

+0

@robertklep 그래, 그게 바로 지금 내가 너무 깊이 혼란스러워하는 이유입니다. –

답변

2

지금 해결책을 찾았습니다.

나는 모듈을 한 번만 models/user으로, 한 번을 model/User으로 요구했다.이 모듈은 require의 캐시에 두 개의 모듈을 생성한다.

이 이것에 대해 많은 논의되었습니다

one issue

another issue

old PR

윈도우 해결 경로 케이스를 구분 인한 것 같다 다른 시스템의 해결 경로의 대소 문자를 구분하면서 따라서 노드는 민감하게 처리합니다.

그리고 'cause '의 새 모듈이 실행됩니다. 두 번 모두 소문자로 철자하면 문제가 해결됩니다.

+0

Windows에서 노드 개발과 관련하여 좀 더 좌절 한 문제를 해결할 수 있습니다. 리눅스로 옮겨라. –

0

"const"변수에 "User"를 선언하는 데 문제가 있다고 생각합니다. 대신 "var"를 사용하십시오.

//user.js 
var User = mongoose.model('User', userSchema) 
module.exports = User 

//In other files 
var User = require('../models/User') 

P/S가 :

Const in javascript? When to use it and is it necessary

가 당신을 위해 도움이 희망이는 "CONST"와 "VAR"에 대한 자세한 내용을 명확히 링크입니다!

+1

당신은 항상 var 이상을 선호해야합니다. –

+1

차이는 있지만 어쨌든 시도해 보았습니다. 모든'const'를'var'으로 대체했습니다. 그것은 그것을 해결하지 못했습니다. –

관련 문제