1

노드에서 Express.js와 Mongoose로 REST API 빌드하기 - 모델 설계시 문제가 발생했습니다 - 모델이나 라우터에서 관계를 어디에 처리해야합니까?Express.js와 몽구스 모델 관계 - 모델 또는 라우터에서?

먼저 MVC에 익숙하지 않고 express.js가 전체 MVC가 아니지만 최고의 디자인 관행을 따르고 싶습니다.

문제는 비교적 쉽습니다. 앱에 사용자가 있고, 각 사용자가 여러 문서 (프로젝트, 주문 등)를 가질 수 있습니다. 분명히 나는 ​​적어도 생성 된 모든 문서에 대한 사용자 ID를 저장해야합니다. 질문은 - 어디에서해야합니까?

각 라우터의 세션에서 사용자 ID를 가져와 문서에 첨부 할 수 있습니다. 또는 현재 사용자 ID를 전역 변수 (예 : app.currentUserID)로 설정하고 내 모델에서이를 사용하여 첨부 할 수 있습니다 ID를 문서에 넣는다.

실제로 사용자가 여러 조직을 가질 수있는 흥미로운 사례가 있으며 특정 조직에서 운영 할 때 사용자가 만드는 각 문서의 조직 ID를 설정해야합니다.

그래서 질문이 있습니다 : 라우터에서 이런 종류의 로직을 처리해야합니까? (익스프레스에는 '컨트롤러'가 없습니다.) 또는 모델입니까?

답변

2

모델에서 수행하십시오. 강요된 관계를 만들지 않더라도 관련 객체의 실제 ID를 저장하면 모델이 변경되므로 라우터에 로직을 남겨 둘 필요가 없습니다.

MongoDB (및 몽구스)에는 관계형 데이터베이스처럼 참조 무결성이 없습니다. 즉, 존재하지 않는 객체에 관계를 삽입하면 데이터베이스에서 오류를 발생시키지 않습니다. 응용 프로그램 코드에서 이러한 관계를 처리 할 수 ​​있습니다.

몽구스는 꽤 자유로운 nosql DB에 구조를 가져 오기위한 시도입니다. 따라서 스키마 유형이 ObjectId 인 관계를 생성 할 수 있습니다.

읽기 다음 SO 대한 추가 정보를 원하시면 답변 : https://stackoverflow.com/a/7813331/1801

+0

감사합니다, 의미가 있습니다. 또한 Yii PHP Framework의 소스를 살펴 보았습니다. 컨트롤러에서이 작업을 수행한다고 가정하더라도 모델의 이러한 종류의 작업을 처리하는 것으로 보입니다. – ragulka

+0

이 글을 읽는 누군가에게 경고의 말을 전한다.'req' 객체에 접근 할 수 있다면 모델 내에서 현재 사용자 ID를 설정할 수있다. Mongoose는'req' 객체를 컨트롤러/라우트에서 모델 생성자로 전달할 방법이 없으므로 대신 내 컨트롤러에서 관계를 관리해야했습니다. 이 모든 것은 노드의 비동기 성질에 기인합니다. 모든 웹 사이트 사용자에 대해 설정되기 때문에 단순히'app.currentUser'와 같은 전역 변수를 설정할 수 없습니다. – ragulka