RISK IT

[TIL24_23.2.1.] [Javascript] 문법 정리 - const{}와 const 및 try {} catch (err) {} 본문

IT/TIL

[TIL24_23.2.1.] [Javascript] 문법 정리 - const{}와 const 및 try {} catch (err) {}

nomoremystery 2023. 2. 1. 17:49
반응형

const {} 와 const의 차이

모듈 불러올 때 const foo = barconst { foo } = bar
의 차이

  • 경로의 입력이 다르다!

⬇️ 1. const { foo } = bar

const { validateToken } = require('../middlewares/auth');
router.post('/', validateToken, postController.createPost);

⬇️ postRouter.js파일

const express = require('express');
const router = express.Router();

const postController = require('../controllers/postController');
const { validateToken } = require('../middlewares/auth');

router.post('/', validateToken, postController.createPost);
router.get('/', postController.getPosts);
router.get('/:userId', postController.getPostByUserId);
router.patch('/:postId/:userId', postController.updatePost);
router.delete('/:postId', postController.deletePost);

module.exports = {
  router,
};

⬇️ 2. const foo = bar

const auth = require('../middlewares/auth');
router.post('/', auth.validateToken, postController.createPost);

⬇️ postRouter.js파일

const express = require('express');
const router = express.Router();

const postController = require('../controllers/postController');
const auth = require('../middlewares/auth');

router.post('/', auth.validateToken, postController.createPost);
router.get('/', postController.getPosts);
router.get('/:userId', postController.getPostByUserId);
router.patch('/:postId/:userId', postController.updatePost);
router.delete('/:postId', postController.deletePost);

module.exports = {
  router,
};

try {} catch (err) {}

📝 나의 예시 코드

const signUp = async (req, res) => {
  try {
    const { name, email, password, profileImage } = req.body;

    if (!name || !email || !password) {
      const err = new Error('⚠️ Key Error!');
      err.code = 400;
      throw err;
    }

    await userService.signUp(name, email, password, profileImage);

    res.status(201).json({ message: 'createUser' });
  } catch (error) {
    return res.status(error.code).json({ message: error.message });
  }
};

새로 배운 내용

1. http 상태 코드

참조 링크

const deletePost = async (req, res) => {
  const { postId } = req.params;

  await postService.deletePost(postId);

  return res.status(200).json({ message: 'postDeleted' });
};

위의 코드에서 status(204)를 설정했더니, json 메세지 'postDeleted'가 출력되지 않았다. 상태 응답 코드가 204는 No Content이기 때문에 나오지 않았던 것이다. 다시 상태코드를 200으로 설정하니 메세지가 잘 출력되었다.

그 외에 내가 사용해본 상태 코드로는 200(OK), 201(Created), 400(Bad Request), 401(Unauthorized)

2. new Error, throw

Error 생성자는 오류 객체를 생선한다.
내가 사용한 구문은 new Error(message)이고 사람이 읽을 수 있는 오류 메시지를 담는다.

매개변수
추가할 수 있는 인자로는 new Error(message, fileName, lineNumber)이 있다.

  • filename: 생성할 Error 객체의 fileName 속성으로 설정할 값. 기본 값은 Error() 생성자를 호출한 파일의 이름이다.
  • lineNumber: 생성할 Error 객체의 lineNumber 속성으로 설정할 값. 기본 값은 Error() 생성자를 호출한 줄의 번호이다.

New의 사용
Error를 new 없이 함수로써 호출한 경우에도 Error 객체를 반환한다. 따라서 단순히 Error를 호출하기만 해도 new 키워드를 사용한 것과 같은 결과를 낳는다.

참고 링크-mdn

3. try {} catch(err) {} 구문

try...catch 문은 실행할 코드블럭을 표시하고 예외(exception)가 발생(throw)할 경우의 응답을 지정한다.

반응형