• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

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

20.01.14 17:23 작성 조회수 209

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)

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

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

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

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

답변 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 번 포트에서 서버 대기 중');
});