node.js에서 express.js로 서버를 만들고 sequelize로 회원가입 API를 만들고 있는 도중에 에러가 발생했다.
C:\Users\82102\Desktop\sparta\Node.js_week2\node-week2-sequelize(2T)\node_modules\sequelize\lib\sql-string.js:53
throw new Error(`Invalid value ${logger.inspect(val)}`);
^
Error: Invalid value { nickname: 'minju1' }
at Object.escape (C:\Users\82102\Desktop\sparta\Node.js_week2\node-week2-sequelize(2T)\node_modules\sequelize\lib\sql-string.js:53:11)
at MySQLQueryGenerator.escape (C:\Users\82102\Desktop\sparta\Node.js_week2\node-week2-sequelize(2T)\node_modules\sequelize\lib\dialects\abstract\query-generator.js:729:22)
at MySQLQueryGenerator._whereParseSingleValueObject (C:\Users\82102\Desktop\sparta\Node.js_week2\node-week2-sequelize(2T)\node_modules\sequelize\lib\dialects\abstract\query-generator.js:2007:41)
at MySQLQueryGenerator.whereItemQuery (C:\Users\82102\Desktop\sparta\Node.js_week2\node-week2-sequelize(2T)\node_modules\sequelize\lib\dialects\abstract\query-generator.js:1765:19)
at C:\Users\82102\Desktop\sparta\Node.js_week2\node-week2-sequelize(2T)\node_modules\sequelize\lib\dialects\abstract\query-generator.js:1684:25
at Array.forEach (<anonymous>)
at MySQLQueryGenerator.whereItemsQuery (C:\Users\82102\Desktop\sparta\Node.js_week2\node-week2-sequelize(2T)\node_modules\sequelize\lib\dialects\abstract\query-generator.js:1682:35)
at MySQLQueryGenerator.getWhereConditions (C:\Users\82102\Desktop\sparta\Node.js_week2\node-week2-sequelize(2T)\node_modules\sequelize\lib\dialects\abstract\query-generator.js:2025:19)
at MySQLQueryGenerator.selectQuery (C:\Users\82102\Desktop\sparta\Node.js_week2\node-week2-sequelize(2T)\node_modules\sequelize\lib\dialects\abstract\query-generator.js:954:28)
at MySQLQueryInterface.select (C:\Users\82102\Desktop\sparta\Node.js_week2\node-week2-sequelize(2T)\node_modules\sequelize\lib\dialects\abstract\query-interface.js:407:59)
invalid value...?
느낌상 sql로 DB를 검색하는 과정에서 문제가 있는 것 같았는데.. 에러 메시지를 구글링해봐도 딱 들어맞는 내용이 안 나와서 하루 종일 붙잡고 있었다...
결국 코드를 다 지우고 위에서부터 처음부터 하나씩 해보니까 안 되는 부분이 어딘지 발견했다.
// nickname이 동일한게 이미 있는지 확인하기 위해 가져온다.
const existsUsers = await User.findAll({
where: {nickname},); // ★ 문제의 부분!!
if (existsUsers.length) {
res.status(400).send({
errorMessage: "중복된 닉네임입니다.",
});
return;
}
동일한 nickname이 있는지 DB에서 찾는 sequelize 쿼리를 엉망으로 써버린 것이었다. 위의 코드 스니펫(where: {nickname}
)처럼 써줘야 하는데 이상하게 써놨더니 에러를 뱉어버린 것 같다.
코드를 바꿔주니 회원가입에 정상적으로 성공한다! (감격...)
+ 이후에 여러가지를 실험하면서 또 한번 회원가입 시 값들이 null로 들어오는 문제가 있어 또 한바탕했는데...
app.use(express.json());
이번에는 이 미들웨어를 삭제해서 http 요청으로 body를 받아올 때 json 구문을 파싱(분석)을 못해서 생긴 에러였다.
오늘의 교훈 sequelize 문법을 제대로 입력하자!
미들웨어의 쓰임을 정확하게 파악하자 ㅠㅠ