inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Node.js 교과서 - 기본부터 프로젝트 실습까지

4. http 모듈로 웹 서버 만들기의 라우터 리팩토리 부분 질문 드립니다!

해결된 질문

319

정중한 전어

작성한 질문수 18

0

안녕하세요. 강의 잘 듣고 있습니다. 

http 모듈로 웹 서버 만들기 > 라우터 리팩토리 부분에서 

GET, POST의 경우 제대로 잘 동작하는데 PUT이나 DELETE 동작을 수행하고자 할 경우

(matchedUrl || router[req.method.toLowerCase()]['*'])(req, res);

                                                         ^

TypeError: (matchedUrl || router[req.method.toLowerCase(...)].*) is not a function

    at Server.<anonymous> (/Users/-/Desktop/code/study_nodejs/restServer.js:79:58)

    at Server.emit (events.js:210:5)

    at parserOnIncoming (_http_server.js:745:12)

    at HTTPParser.parserOnHeadersComplete (_http_common.js:115:17)

계속 위와 같은 에러가 떠서 질문 드립니다!

리팩토리 이전까지는 잘 진행되었는데 이후에 계속 같은 오류가 뜨네요 ㅠㅠ 

제가 작성한 코드는 아래에 따로 작성하겠습니다.

도움 주시면 감사하겠습니다.

mysql javascript nodejs mongodb

답변 5

1

제로초(조현영)

아 주소 뒤에 아이디가 붙어있어서 그렇습니다. 그럴때는 startsWith를 써야합니다. 사실 지금까지배운 내용으로는 조금 어려울 수 있습니다.

0

정중한 전어

앗 그렇군요..  말씀해주신 문제점 참고하여 코드 다음과 같이 수정했더니 이젠 잘 동작하네요..! 감사합니다!

http.createServer((req, res) => {
console.log(req.url, req.method);
const matchedUrl = router[req.method.toLowerCase()]['/'+(req.url.split('/')[1]||'')];
(matchedUrl || router[req.method.toLowerCase()]['*'])(req, res);
}).listen(8005, () => {
console.log('8005 번 포트에서 서버 대기 중');
});

0

정중한 전어

처음 접속 시 :  /users GET

등록 시 : /users POST, /users GET

수정 시 : /users/1578995716632 PUT (이후 에러)

삭제 시 : /users/1578995769405 DELETE (이후 에러)

입니다!

0

제로초(조현영)

혹시 console.log(req.url, req.method)로 바꿔서 결과 알려주실수 있나요?

0

정중한 전어

const http = require('http');
const fs = require('fs');
const users = {

};

const router = {
get: {
'/': (req, res) => {
return fs.readFile('./restFront.html', (err, data) => {
if (err) {
throw err;
}
res.end(data);
});
},
'/users': (req, res) => {
res.end(JSON.stringify(users));
},
'*': (req, res) => {
fs.readFile(`.${req.url}`, (err, data) => {
return res.end(data);
});
},
},
post: {
'/users': (req, res) => {
let body = '';
req.on('data', (chunk) => {
body += chunk;
});
req.on('end', () => {
console.log('POST 본문(body)', body);
const {
name
} = JSON.parse(body);
const id = +new Date();
users[id] = name;
res.writeHead(201, {
'Content-Type': 'text/html; charset = utf-8'
});
res.end('사용자 등록 성공');
});
},
},
put: {
'/users': (req, res) => {
const id = req.url.split('/')[2];
let body = '';
req.on('data', (chunk) => {
body += chunk;
});
return req.on('end', () => {
console.log('put', body);
users[id] = JSON.parse(body).name;
return res.end(JSON.stringify(users));
});
},
},
delete: {
'/users': (req, res) => {
const id = req.url.split('/')[2];
let body = '';
req.on('data', (chunk) => {
body += chunk;
});
return req.on('end', () => {
console.log('delete', body);
delete users[id];
return res.end(JSON.stringify(users));
});
},
},
};

http.createServer((req, res) => {
console.log(req.url);
const matchedUrl = router[req.method.toLowerCase()][req.url];
(matchedUrl || router[req.method.toLowerCase()]['*'])(req, res);
}).listen(8005, () => {
console.log('8005 번 포트에서 서버 대기 중');
});


실제 서비스에서도 cluster를 사용하나요?

1

313

2

캐싱에 관하여

0

279

3

salt를 실무에서 사용할때 항상 randomBytes로 만들어줘야 하나요?

0

347

1

게시물 올리기 오류

0

408

1

캐슁 이후 로그인창

0

266

1

kakao passport 질문있습니다.

0

493

3

global객체 공유 질문드립니다.

1

418

1

서버가 죽어버리네요

0

1047

8

포링키 문제..

0

235

2

커넥션 플래시 설치문제

0

216

2

익스프레스 제너레이터? 설치문제

0

2586

6

redis 질문입니다.

0

305

1

9장 세션을 DB에 저장시 리다이렉션 오류 발생

0

874

8

프레임워크 선택에 관하여 질문이 있습니다.

0

300

3

시퀄라이즈 질문입니다 ! !

0

588

1

리뉴얼 강의 12강 socket.io에서 req.session접근 관련 질문

0

922

6

oAuth 질문입니다.

0

356

3

GCP 질문입니다.

0

366

1

Passport 모듈 로그인 구현관련

0

720

6

카카오 로그인 관련 질문입니다!!

0

606

4

스스로 해보기 10-16 nunjuncks 질문있습니다

0

499

5

제로초님 HTTP 완벽가이드 추천해주신거 너무 잘 읽었습니다.

0

317

2

gif채팅방 nunjucks관련 질문입니다!

0

338

3

현영님 몽고db관련 질문입니다.

0

233

3