내배캠/TIL(Today I Learned)
[TIL]내배캠 19, 20일차
도오라에몽
2023. 6. 13. 21:14
문제점
- api 호출 과정에서 문제 발생
api 테스트를 위해 POST 요청을 보냈더니 404 Not Found를 반환하고 오류 내용은 아래와 같다.
MongoServerSelectionError: connect ECONNREFUSED ::1:27017
at Timeout._onTimeout (C:\Users\ODH\Desktop\javascript_practice\node_modules\mongodb\lib\sdam\topology.js:278:38)
at listOnTimeout (node:internal/timers:569:17)
at process.processTimers (node:internal/timers:512:7) {
reason: TopologyDescription {
type: 'Unknown',
servers: Map(1) { 'localhost:27017' => [ServerDescription] },
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
setName: null,
maxElectionId: null,
maxSetVersion: null,
commonWireVersion: 0,
logicalSessionTimeoutMinutes: null
},
code: undefined,
[Symbol(errorLabels)]: Set(0) {}
}
그리고 위의 문제를 발생하는 코드는 아래와 같다.
const connect = () => {
mongoose.connect("mongodb://localhost:27017/mongodb_prac")
.catch(err => console.log(err));
console.log("MongoDB is connected!");
};
mongoose.connection.on("error", err => {
console.error("몽고디비 연결 에러", err);
});
- 위 에러를 해결하기 위해 이것 저것 해보다가 윈도우에서 백그라운드에서 동작하던 MongoDB의 프로세스를 종료함
mongodb가 설치되어 있는 경로의 bin 폴더에서 mongod.exe를 실행해도 실행이 안되는 문제가 있다.
해결 방법
첫 번째 문제 원인 및 해결 방법
원인은 공식 문서에 기술되어 있어 링크로 남기겠다.
https://www.mongodb.com/docs/manual/core/security-mongodb-configuration/
해결 방법은 mongoose.connect()
부분에서 도메인으로 들어가는 부분이 localhost가 아니라 127.0.0.1로 나타내면 된다. 아니면 문서에 나온대로 설정을 건들면 될 것 같다.(설정은 건들기 귀찮아서 안해봄)
두 번째 문제 해결 방법 : powershell을 관리자 권한으로 실행시켜 net stat MongoDB 명령을 실행시키니 다시 백그라운드로 실행되었다. (윈도우 기준으로 작성)
프로젝트를 하며 추가적으로 고민한 것
URI를 구성하면서 어떤 형태로 구성하는 것인지 생각을 많이 하게 된다.
예를 들면 게시글을 요청하는 URI를 RESTful하게 나타내보자.
GET /api/posts
POST /api/posts
GET /api/posts/postId
PUT /api/posts/postId
DELETE /api/posts/postId
먼저 페이지에서 포스트에 관련된 데이터를 뿌려야 하니 이름을 posts로 지었다. 그리고 기능 개발을 하면서 느낀 것이 POST /api/posts의 경우에는 아직 포스트를 작성한 것이 아니기 때문에 등록하는 과정에서 postId가 생성되어야 한다. 뭐.. 이러한 것들을 개발하면서 느끼게 되었다.
오늘은 끝 ^^