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 를 브라우저에서 열어보세요. 리다이렉션이 잘 이뤄졌다면 성공입니다.