문제 해결 요약
URL parameters 가져올때는 아래 방법으로만 가져와야 한다.
API 주소는 /games/:gameId로 한다.
const id = req.params.gameId;
const game_id = req.params.gameId;
const {gameId} = req.params;
API 구현 공부를 하다가 URL parameters을 인식하지 못하는 문제가 발생했다.
아래 코드가 GET method를 사용하여 gameId를 가진 게임의 상세 정보를 가지고 오는 API 구현 코드이다.
// games.js
const express = require("express");
const router = express.Router();
const {gameDetail} = require('../controller/GameController');
router.get('./:gameId', gameDetail);
코드에서 보면 알 수 있듯이 API의 콜백함수는 controller로 나눠주었다.
// GameController.js
const conn = require("../mariadb");
const { StatusCodes } = require("http-status-codes");
const gameDetail = (req, res) => {
let {id} = req.params;
id = parseInt(id);
let sql = "SELECT * FROM games WHERE id = ?";
conn.query(sql, id, (err, results) => {
...
});
};
module.exports = { gameDetail };
얼핏 기억하기로 request에서 parameters를 받아올 때 두가지 방법이 있다.
API 주소는 /games/:gameId로 한다.
첫번째 방법은 설정해주었던 parameter 변수를 가져오는것이다.
const id = req.params.gameId;
const game_id = req.params.gameId;
이때 id와 game_id와 같이 할당하는 변수명은 자유롭게 해줘도 된다.
두번째 방법은 설정한 paramete 변수를 비구조화를 이용하여 사용하는 방식이다.
const {gameId} = req.params;
이때 중괄호는 꼭 사용해서 비구조화로 만들고, 설정해놓은 parameter 변수명을 그대로 사용해주어야 한다.
나의 경우에는 두번째 방법을 사용했음에도 미리 저장해놓은 변수명이 아닌 그냥 id를 사용했던 것이 문제였다.
Controller로 콜백함수를 모듈화 했기 때문에 주소가 보이지 않아 실수를 한번에 찾을 수 없었다.
'오류해결' 카테고리의 다른 글
api.channel.io API 가져오기 에러 해결 - plugin key (0) | 2024.06.14 |
---|---|
TypeError: Cannot destructure property '변수명' of 'req.body' as it is undefined. (0) | 2024.06.02 |
Node.js에서 .env 변수 안불러와짐 (0) | 2024.05.24 |
mariaDB와 workbench 연동 오류 (0) | 2024.05.10 |
[Fluter] solved - PlatformException 오류 해결 (2) | 2023.11.21 |