
장바구니 조회(선택한 상품 목록 조회)에서 사용자 id를 jwt 토큰으로 변경 및 비동기 처리를 하다 발생한 오류이다.
const getCartItem = async (req, res) => {
const conn = await connection();
const {selected} = req.body; // selected = [cartItemsId1, cartItemsId2...]
try {
const {user_id} = ensureAuthorization(req);
console.log(user_id);
console.log(selected);
let sql = `SELECT cartItems.id, book_id, title, summary, quantity, price, price*quantity as total_price
FROM cartItems
JOIN books ON(cartItems.book_id = books.id)
WHERE user_id = ? AND cartItems.id IN (?)`;
let values = [user_id, selected];
const results = await conn.execute(sql, values);
return res.status(StatusCodes.OK).json(results[0]);
} catch (err) {
console.error(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
};
const ensureAuthorization = (req) => {
let receivedJwt = req.headers["authorization"];
let decodedJwt = jwt.verify(receivedJwt, process.env.PRIVATE_KEY);
return decodedJwt
}

BAD_REQUEST 400 을 띄우는 상황이였다.

code: 'ER_WRONG_ARGUMENTS',
errno: 1210,
sql: 'SELECT cartItems.id, book_id, title, summary, quantity, price, price*quantity as total_price\n' +
' FROM cartItems\n' +
' JOIN books ON(cartItems.book_id = books.id)\n' +
' WHERE user_id = ? AND cartItems.id IN (?)',
sqlState: 'HY000',
sqlMessage: 'Incorrect arguments to mysqld_stmt_execute'
어디가 문제인지 몰라서 2개를 확인해 보았다.
답답하게도 위의 사항들은 이상이 없었다.
그러다가 에러 메시지에 좀 더 치중하여 분석해보니, execute 라는 단어가 강조되어 보였다.
혹시나 하여 execute를 사용하지 않고 query로 변경을 하니 에러가 해결됐다.
const getCartItem = async (req, res) => {
const conn = await connection();
const {selected} = req.body; // selected = [cartItemsId1, cartItemsId2...]
try {
const {user_id} = ensureAuthorization(req);
console.log(user_id);
console.log(selected);
let sql = `SELECT cartItems.id, book_id, title, summary, quantity, price, price*quantity as total_price
FROM cartItems
JOIN books ON(cartItems.book_id = books.id)
WHERE user_id = ? AND cartItems.id IN (?)`;
let values = [user_id, selected];
const results = await conn.query(sql, values);
return res.status(StatusCodes.OK).json(results);
} catch (err) {
console.error(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
};
const ensureAuthorization = (req) => {
let receivedJwt = req.headers["authorization"];
let decodedJwt = jwt.verify(receivedJwt, process.env.PRIVATE_KEY);
return decodedJwt
}
