node.js | 인스타그램: 서버-db연결, 회원가입

2022. 10. 3. 19:52·TIL
반응형

비밀번호 암호화가 없는 회원가입

프로젝트 생성

mkdir westagram-node
cd westagram-node
npm init -y

 

초기설정

  1. Express 설치 / 적용
  2. nodemon 설치 / 적용
  3. cors 설치 / 적용
  4. dotenv 설치 / 환경 변수 적용
  5. morgan 설치 / 적용
npm install express
...

 

morgan은 http요청과 에러를 기록해주는 미들웨어라고 한다. 아직 사용법을 모르겠으니 일단 설치만 했다.

 

모든 cors 요청 허용하는법

const express = require('express');
const cors = require('cors');

const app = express();
app.use(cors());

 

 

typeorm-db연결

npm install mysql2
npm install typeorm

.

// .env
TYPEORM_CONNECTION = mysql
TYPEORM_HOST = 127.0.0.1
TYPEORM_PORT = 3306
TYPEORM_USERNAME = root
TYPEORM_PASSWORD = 비밀번호
TYPEORM_DATABASE = db이름
TYPEORM_LOGGING = TRUE

// app.js
require('dotenv').config();
const http = require('http');
const express = require('express');
const cors = require('cors');
const { DataSource } = require('typeorm');

const myDataSource = new DataSource({
    type: process.env.TYPEORM_CONNECTION,
    host: process.env.TYPEORM_HOST,
    port: process.env.TYPEORM_PORT,
    username: process.env.TYPEORM_USERNAME,
    password: process.env.TYPEORM_PASSWORD,
    database: process.env.TYPEORM_DATABASE
});

myDataSource.initialize().then(() => {
    console.log("Data Source has been initialized")
    }).catch(() => {
    console.log("Database initiate fail")
    })

const app = express();
app.use(express.json());
app.use(cors()); // 모든 cors요청 허용

const server = http.createServer(app);
server.listen(8000, () => {console.log("서버켜짐");});

 

회원가입

1. 알맞은 API 호출 URL을 설정하여서 클라이언트와(httpie/postman) 통신을 성공해주세요.

    - /users : 유저관련된 api이기때문에
2. 알맞은 http 메소드를 선정하여서 유저의 정보를 백엔드 서버에 전달해주세요.

    - post : body에 담긴 내용으로 데이터를 생성/수정할때 사용
3. 데이터가 생성됐을 때에 알맞는 http 상태코드를 반환해주세요.

    - 201 : post요청에 따라 백엔드 서버에 데이터가 잘 생성/수정되었을때 코드
5. http response로 반환하는 JSON 데이터의 형태는 다음과 같습니다.

        {
          "message" : "userCreated"
        }

 

회원 테이블 구조

mysql> desc users;
+---------------+---------------+------+-----+-------------------+-------------------+
| Field         | Type          | Null | Key | Default           | Extra             |
+---------------+---------------+------+-----+-------------------+-------------------+
| id            | int           | NO   | PRI | NULL              | auto_increment    |
| email         | varchar(100)  | NO   | UNI | NULL              |                   |
| nickname      | varchar(50)   | YES  |     | NULL              |                   |
| password      | varchar(300)  | NO   |     | NULL              |                   |
| profile_image | varchar(3000) | YES  |     | NULL              |                   |
| created_at    | datetime      | NO   |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+---------------+---------------+------+-----+-------------------+-------------------+

id, created_at은 db에서 자동으로 값을 할당한다.

 

// app.js
app.post('/users', async (req, res) => {
    const {email, nickname, password, profileImage} = req.body;
    // 쿼리를 날리는건 비동기식으로 처리되는데 쿼리를 실행한 후 응답을 해줘야 하니까 async await를 썼다.
    await myDataSource.query(
        `INSERT INTO users (email, nickname, password, profile_image)
        VALUES (?, ?, ?, ?)`
        , [email, nickname, password, profileImage]);
    
    res.status(201).json({"message" : "userCreated"});
});

필수값인 email, password만 넣어서 회원가입을 했다.

데이터가 잘 들어온 것을 확인할 수 있다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'TIL' 카테고리의 다른 글

node.js | 인스타그램: 비밀번호 암호화(bcrypt)  (1) 2022.10.04
node.js | 인스타그램: 게시글 CRUD  (1) 2022.10.04
node.js | express, TypeORM 적용한 CRUD API만들기 - 2 API작성  (0) 2022.10.02
node.js | express, TypeORM 적용한 CRUD API만들기 - 1 db(dbmate)  (0) 2022.10.02
node.js | TypeORM 적용하기  (0) 2022.10.01
'TIL' 카테고리의 다른 글
  • node.js | 인스타그램: 비밀번호 암호화(bcrypt)
  • node.js | 인스타그램: 게시글 CRUD
  • node.js | express, TypeORM 적용한 CRUD API만들기 - 2 API작성
  • node.js | express, TypeORM 적용한 CRUD API만들기 - 1 db(dbmate)
이라후
이라후
  • 이라후
    화이팅
    이라후
  • 전체
    오늘
    어제
    • 분류 전체보기 (133)
      • TIL (23)
      • 기타 (26)
      • Python (14)
      • Django (10)
      • JavaScript (8)
      • git & GitHub (8)
      • Web (10)
      • Go (3)
      • wecode (31)
  • 반응형
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이라후
node.js | 인스타그램: 서버-db연결, 회원가입
상단으로

티스토리툴바