
장바구니 아이템 삭제 API에서 query를 excute 변경과 비동기 처리를 하던 도중 발생한 오류이다.
const removeCartItem = async (req, res) => {
const conn = await connection();
const cartItemId = req.params.id;
try {
let sql = `DELETE FROM cartItems WHERE id = ?`
const [results] = await conn.execute(sql, cartItemId);
return res.status(StatusCodes.OK).json(results);
} catch (err) {
console.error(err);
return res.status(StatusCodes.BAD_REQUEST).end();
} finally {
await conn.end(); // 연결 종료
}
};

타입에러가 발생한 모습이다.

TypeError: Bind parameters must be array if namedPlaceholders parameter is not enabled
mysql2 라이브러리에서 execute 메서드를 사용할 때 바인드 파라미터가 배열 형태여야 하는 이유는 Prepared Statements의 특성 때문이다. 이 메서드는 SQL 인젝션을 방지하고 성능을 최적화하기 위해 바인드 파라미터를 사용한다.
아무튼 배열로서 그 값을 받는 것이 특징이다.
const removeCartItem = async (req, res) => {
const conn = await connection();
const cartItemId = req.params.id;
try {
let sql = `DELETE FROM cartItems WHERE id = ?`
const [results] = await conn.execute(sql, [cartItemId]);
return res.status(StatusCodes.OK).json(results);
} catch (err) {
console.error(err);
return res.status(StatusCodes.BAD_REQUEST).end();
} finally {
await conn.end(); // 연결 종료
}
};
