본문 바로가기

Project/TIL

(24)
20.03.25 ShareBook TIL 유저 로그인 test 작성 데이터베이스에 들어있는 유저와 비교하여 같은 값이면 status 200을 보낸다. test('should respond user id to signin data', async done => { const response = await request(app) .post('/users/signin') .send({ email: 'test_123@gmail.com', password: 'test_password', }); expect(response.status).toEqual(200); done(); }); 데이터베이스에 들어있지 않은 유저는 에러를 출력한다. test('should respond NOT FOUND with unvalid user', async done => { c..
20.03.24 ShareBook TIL 중간 배포를 위해 EC2, RDS를 다시 설정하였다. EC2에 git에서 clone을 하고 서버를 작동시켜보니 ts로 돌려서 그런지 작동하지 않고 대기 상태로 있다가 timeout같은 시간 초과 에러가 났다. 그리고 갑자기 EC2 자체가 느려져서 nodejs를 삭제하고 다시 nvm으로 높은 버전의 node를 설치하였다. 그리고 나서 혹시 js로 돌리면 될까 해서 tsc로 js로 변환한뒤 돌려보니 RDS와 연결이 되지 않는 에러가 생겼다. workbench로 RDS를 연결했을 때는 정상적으로 작동해서 EC2에서 잘 못 설정한게 있다고 생각했다. 그래서 local에서 한번 config.json을 수정하고 연결하여도 똑같은 에러가 발생했다. 그럼 보안 설정에서 문제인가 싶어서 EC2, RDS 보안 그룹에서 설..
20.03.23 ShareBook TIL 유저 회원 가입 test 작성 test 유저 데이터를 작성한다. // __test__/fixtures/users.json [ { "name": "test_아이언맨", "nickname": "test_빌런", "email": "test_123@gmail.com", "password": "test_password", "gender": "test_남자", "region": "test_서울 관악구 봉천동" } ] test가 실행되면 테이블을 비우고 만들어 놓은 test 유저 데이터를 생성한다. beforeEach(async () => { await Users.destroy({ where: {}, truncate: false }); await Users.create(usersFixture[0]); }); 회원 가..
20.03.22 ShareBook TIL Jest를 이용하여 typescript에서 express server 실행 테스트 프로젝트를 하면서 test를 한 번 만들어 보고 싶어서 jest를 사용하여 먼저 server 실행 테스트를 만들어 보았다 jest에서 typescript를 실행하기 위한 ts-jest와 request를 사용하기 위해 supertest 모듈, jest의 type, supertest의 type 모듈을 설치한다 npm install --save-dev ts-jest supertest @types/jest @type/supertest jest typescript __test__폴더를 만들고 테스트할 파일 이름은 {파일 이름}.test.ts로 만든다. package.json에서 jest 설정 정보를 넣는다. { "jest": { "..
20.03.21 ShareBook TIL books table에서 해당 유저 id가 들어 있는 컬럼은 제외하고 데이터를 불러와야해서 Sequelize에서 [Op.notIn] 이란 걸 사용해야 했다. 그러려면 sequelize에 있는 Op란걸 사용해야하는데 아무리 찾아봐도 사용법만 나오고 이걸 불러와야 된다는 말은 없어서 많이 돌아돌아 갔다. import { Op } from 'sequelize'; 그러다 require 와 import의 차이점이 궁금해졌다. 찾아보니 require는 동적으로 모듈을 불러오지만, 불필요한 코드들까지 불러오기때문에 실제로 어떤 코드가 사용되는지는 알 수가 없다고 한다. const sequelize = require('sequelize'); const Op = sequelize.Op; 그래서 사용할 코드들을 다시 지정..
20.03.20 ShareBook TIL 팀원 분과 server api 문서를 작성 및 세부 사항을 수정하였다. 유저가 해당 도서를 선택하면 isRental의 상태값이 대여 요청으로 변경되고 userBorrowId에는 유저의 id가 들어 갈수 있는 함수를 작성하였다. import { Request, Response, NextFunction } from 'express'; import { Books } from '../../../models/Books'; import jwt from 'jsonwebtoken'; const jwtSecret = String(process.env.JWT_SECRET); module.exports = { post: async (req: Request, res: Response) => { const { id } = re..
20.03.19 ShareBook TIL 유저와 책 테이블에서 한 명의 유저는 여러 가지의 책을 등록할 수 있다 생각해서 일대다 관계를 설정했다고 생각했는데 막상 포스트맨으로 날려보니 유저 아이디가 들어가지 않았다. const token = req.cookies.data; const decoded = jwt.verify(token, String(process.env.JWT_SECRET)); try { if (decoded) { // console.log(decoded); await Books.create({ name: name, publisher: publisher, writer: writer, quelity: quelity, description: description, image: image, isRental: isRental, bookRe..
20.03.18 ShareBook TIL 로그인 함수와 로그인을 했을때 JWT를 사용하여 토큰을 발급해주는 함수를 작성하였다. import { Router, Request, Response, NextFunction } from 'express'; import jwt from 'jsonwebtoken'; import { Users } from '../../../models/Users'; // require('dotenv').config(); // import 'dotenv/config'; const signin = Router(); const jwtSecret = String(process.env.JWT_SECRET); signin.post( '/signin', async (req: Request, res: Response, next: NextF..