10-4. 유저 프로필, 유저 썸네일 API 생성

잠깐 서버쪽으로 돌아와서, API 두개를 준비하겠습니다. 하나는 유저 프로필을 가져오는 API 인데요, 이 API 는 유저의 프로필정보와, 지금까지 몇개의 생각을 포스팅했는지 알려줍니다.

두번째 API는 특정 유저의 썸네일 주소로 리다이렉트를 해줍니다. 예를들어, foo 유저의 썸네일을 로딩하고 싶다면 <img src="/api/users/foo/thumbnail"/> 이런식으로 바로 불러올 수 있게 해줍니다.

컨트롤러 파일 작성

src/api/users/users.controller.js

const Account = require('models/account');

exports.getProfile = async (ctx) => {
    const { username } = ctx.params;

    // 계정 찾기
    let account;
    try {
        account = await Account.findByUsername(username);
    } catch (e) {
        ctx.throw(500, e);
    }

    if(!account) {
        ctx.status = 404;
        return;
    }

    // 프로필과 생각 수 응답
    ctx.body = {
        profile: account.profile,
        thoughtCount: account.thoughtCount
    };
};


exports.getThumbnail = async (ctx) => {
    const { username } = ctx.params;

    // 계정 찾기
    let account;
    try {
        account = await Account.findByUsername(username);
    } catch (e) {
        ctx.throw(500, e);
    }

    if(!account) {
        ctx.status = 404;
        return;
    }

    // 썸네일 주소로 리다이렉트
    ctx.redirect(account.profile.thumbnail);
};

users 라우트 설정

src/api/users/index.js

const Router = require('koa-router');
const users = new Router();

const usersCtrl = require('./users.controller');

users.get('/:username', usersCtrl.getProfile);
users.get('/:username/thumbnail', usersCtrl.getThumbnail);

module.exports = users;

api 라우트 설정

src/api/index.js

const Router = require('koa-router');

const api = new Router();
const auth = require('./auth');
const posts = require('./posts');
const users = require('./users');

api.use('/auth', auth.routes());
api.use('/posts', posts.routes());
api.use('/users', users.routes());

module.exports = api;

이제 다음 요청에 대한 테스트를 해보세요:

GET http://localhost:4000/api/users/velopert
GET http://localhost:4000/api/users/velopert/thumbnail

Postman 으로 두번째 API 를 실행했을때 Not Found 가 나온다면 정상입니다. 왜냐하면 실제로, 이미지는 아직 백엔드서버 측에서 제공되고 있지는 않기 떄문이죠. 한번 해당 API 를 브라우저에서 열어보세요. 리다이렉션이 잘 이뤄졌다면 성공입니다.

results matching ""

    No results matching ""