[이름검색]
param에 찾고싶은 이름을 작성하면 해당 이름을 가진 데이터를 찾아오는 코드를 작성하려고한다.
다만, 다른 서버가 해당 데이터를 가지고 있어서, axios로 연결하여 가져오려고 한다.
router.get(
`/search/:name`,
[
check('name')
.exists({ checkFalsy: true, checkNull: true })
.isString()
.trim()
],
(req, res) => {
// ...생략
return controller.getDocByName(req, res);
}
);
exports.getDocByName =async (req, res) => {
const { name } = req.params;
const result = await axios.post(`${process.env.URI}/internal/${name}`);
// ...
}
Request path contains unescaped characters
라는 에러가 발생했다.
찾아보니, url경로에 인코딩 되지 않은 문자인 한글이 포함되서 발생는 오류이다.
(공백, 특수문자 혹은 UTF-8로 인코딩 되지 않은 문자...)
그래서 name param에 한글을 넣는 순간 위와 같은 에러가 발생하는거..오키 이해완료! 그저 인코딩, 디코딩만 해주면 된다.
보내는 쪽에서
const name = encodeURI(req.params.name);
받는 쪽에서
let name = decodeURI(req.params.name) || '';
console로 찍어보니 아래처럼 인코딩 된 문자로 넘어가서 에러없이 잘 응답한다!
그런데, 해결 하기 전 다른 서버에서 테스트를 해보았다.
한글 인코딩,디코딩이 평소에 자주 만났던 문제는 아닌것 같았는데...?
const router = express.Router();
router.get("/:id", async (req: express.Request, res: express.Response) => {
const id = req.params.id;
res.status(200).json(id);
});
대충 서버 하나 띄워서 위와 같은 라우터를 생성했다.
음 123은 당연히 잘 뜨지.
한글을 입력한다면? url에 인코딩처리 하지 않은 문자가 들어가니 오류가 뜨나?
아니. 한글이 너무 잘 출력된다
왜인가 찾아보니
Express.js의 router.get 메서드를 사용할 때는 URL 경로가 라우터에 의해 자동으로 인코딩되므로 이와 같은 오류가 발생하지 않습니다.
아하....!!! 알아갑니다..