22.10.6 내용 길이 제한

    이제 body의 길이가 200자 이상이면 뒤에 ‘…’을 붙이고 문자열을 자르는 기능을 구현해 보겠습니다. find()를 통해 조회한 데이터는 mongoose 문서 인스턴스의 형태이므로 데이터를 바로 변형할 수 없습니다. 그 대신 toJSON() 함수를 실행하여 JSON 형태로 변환한 뒤 필요한 변형을 일으켜 주어야 합니다.

    list 함수를 다음과 같이 수정해 보세요.

    src/api/posts/posts.ctrl.js - list

    export const list = async ctx => {
      // query는 문자열이기 때문에 숫자로 변환해 주어야 합니다.
      // 값이 주어지지 않았다면 1을 기본으로 사용합니다.
      const page = parseInt(ctx.query.page || '1', 10);
    
      if (page < 1) {
        ctx.status = 400;
        return;
      }
    
      try {
        const posts = await Post.find()
          .sort({ _id: -1 })
          .limit(10)
          .skip((page - 1) * 10)
          .exec();
        const postCount = await Post.countDocuments().exec();
        ctx.set('Last-Page', Math.ceil(postCount / 10));
        ctx.body = posts
          .map(post => post.toJSON())
          .map(post => ({
            ...post,
            body:
              post.body.length < 200 ? post.body : `${post.body.slice(0, 200)}...`,
          }));
      } catch (e) {
        ctx.throw(500, e);
      }
    };

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.