node.js
-
CORS cross domain issueToday I Learned 2020. 1. 15. 17:21
문제 react.js 클라이언트로부터 node.js로 구축한 API 서버에 서비스를 요청할 때, CORS cross domain issue가 발생했다. 이 문제는 다른 도메인 서버에 요청하는 것을 보안 문제로 간주해 이를 막는 것이다. 해결 이 문제는 서버측에서 CORS를 활성화시켜 cross domain을 허용해 해결할 수 있다. app.js origin은 허용하고자 하는 주소를 뜻하며, credentials는 true로 설정하면 모든 res 헤더에 추가해준다.
-
.envToday I Learned 2020. 1. 13. 10:57
dotenv .env 파일에 따로 환경변수를 저장할 수 있다. 그러면 DB나 다른 자신의 정보를 .env 파일에 분리해서, gitignore 파일로 그 정보만 따로 제외하고 공유 할 수 있다. 설치 .env 파일에서 환경변수를 로드 하기 위해서 dotenv 모듈을 사용한다. npm install --save dotenv 사용법 프로젝트 루트 경로에 .env 파일을 생성하고 해당 파일에 DB 접속 정보를 입력한다. DB_NAME=DotENV DB_USER=root DB_PASS=1234 DB_HOST=localhost .env routes/index.js 설정파일 사용 시 단점 설정파일의 확장자는 json 혹은 js 파일인데 통신 시, 암호화되지 않아 해킹의 위험이 있다. env를 사용하면 dotenv 모..
-
SequelizeToday I Learned 2020. 1. 10. 12:07
Sequelize란? nodeJS에서 mysql을 사용할 때 raw Query문을 사용하지 않고 ORM(Object-Relational Mapping)을 이용해 더욱 쉽게 다룰 수 있도록 도와주는 라이브러리이다. ORM이란 객체와 관계형 데이터베이스의 관계를 매핑 해주는 도구이다. 설치방법 터미널에 sequelize init 명령어를 사용하게 되면 config, models, migrations, seeders 폴더가 생성된다. models/index.js index.js 파일에서 반복문을 돌면서 models 폴더 내에 있는 파일들을 읽고, 그것들을 모델로 정의한다. 그래서 models에 원하는 테이블 이름을 파일의 이름으로 js 파일로 만들어 준 후 모델을 정의 하면 테이블이 만들어진다. 모델을 정의하..
-
getQueryToday I Learned 2020. 1. 8. 17:25
문제 미들웨어 구현 도중에 this 키워드로 값들을 불러오지 못한 오류가 발생했다. 해결 미들웨어를 적용할 함수들 중에서 이미 생성한 Schema 객체를 이용하는 것이 있고, 객체 안의 메소드만을 사용하는 것이 있다. 이미 생성한 객체를 이용할 경우, this 키워드로 값을 빼올 수 있지만, 객체 안의 메소드만을 사용할 경우, thisr가 아닌 getQuery를 이용해 함수의 입력 인자들을 받아서 사용할 수 있다. model/Likes.js 이 코드가 첫 번째 케이스이다. this 키워드로 전부 해결할 수 있다. 이 코드는 두 번째 케이스로 getQuery로 해결했다.
-
mongoose middleware 제작Today I Learned 2020. 1. 8. 17:16
문제 다른 document의 내용을 manual reference 통해 참조하는 방법을 채택하고 프로젝트를 진행했다. 그러나, 어떤 document가 삭제되었을 때, 이것을 참조하는 document에서는 cascade 하게 삭제되지 않는 문제가 발생했다. 해결 stackoverflow에서 비슷한 사례들을 찾아본 결과, 자체적으로 연쇄적으로 지워주는 기능을 수행하는 미들웨어를 제작하는 방법으로 해결했다. 그래서 model 폴더에 존재하는 각각의 파일들에 미들웨어를 제작해 사용했다. model/Comment.js 위의 코드는 getQuery를 통해 함수의 입력 파라미터를 받고, 두 번의 query를 이용해 User, board document에 필요없는 _id 값을 삭제하는 기능을 수행하는 미들웨어이다. 출..
-
Node.js를 이용한 회원가입 기능 구현Today I Learned 2019. 12. 25. 23:03
Packages crypto-promise crypto 모듈의 promise 버전이다. multer multipart/form-data를 다루기 위한 미들웨어이다. 본 프로젝트에서는 amazon-s3를 이용해 프로필 사진을 저장한다. jwt JSON Web Token (JWT) 은 웹표준으로서 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달해줍니다. 본 프로젝트에서는 회원 인증 용도로 사용하였다. 타당한 사용자인지 검사하고, token 안에 유저 정보들을 활용해 앱을 동작한다. Logic /model/user.js 위의 코드는 amazon RDS를 이용해 mysql을 사용한다. 크게 signup, checkUser 기능이 있다. s..
-
Socket.io를 이용한 채팅 서버 구축Today I Learned 2019. 12. 24. 22:05
socket.io JavaScript를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있도록 한 기술이며 표준 기술이 아니고 Node.js 모듈이다. 그림과 같이, 실시간 분석이나 채팅과 같은 기능들에 사용된다. socket.io's functions socket.on(eventName, callback) : 어떤 이벤트가 동작하면 callback 함수를 동작한다. socket.leave(room[, callback]) : 어떤 방을 떠나고, callback 함수를 동작한다. socket.to(room).emit(eventName[, …args][, ack]) : 어떤 room에 event를 socket으로 방출하는 함수이다. 다른 파라미터들도 포함될 수 있다. socket.of('/names..