내일배움캠프 TIL (221222)

Jiumn·2022년 12월 22일
0

Error: Invalid value

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 문법을 제대로 입력하자!
미들웨어의 쓰임을 정확하게 파악하자 ㅠㅠ

profile
Back-End Wep Developer. 꾸준함이 능력이다. Node.js, React.js를 주로 다룹니다.

0개의 댓글