사내스터디 - node JS + express

🐳ㅇㅡㄴㄱㅓ·2022년 10월 12일
0

사내스터디

목록 보기
6/7

POST 전송

//server.js 혹은 index.js에서는 app.post 로 받아서 씀
//근데 입력한 post값을 이용하기 위해서는 body parser 라이브러리가 필요한데 
//2021년 이후로 설치한 프로젝트는 body-parser 라이브러리가 express에 기본포함이라 별도 설치는 필요없고 use만 써주면됨.

//body-parser 라이브러리 사용 설정
app.use(express.urlencoded({extended: true}))

app.post('경로', function(req, res) {
	
});

REST API

  • Application Programming Interface
  • API 디자인 방법
  • 원칙 6개
    - Uniform interface ( 얘만 젤 중요함)
    - 하나의 URL로는 하나의 데이터를 가져와야함
    - 간결하고 예측가능하게
    - URL 이름짓기 관습을 잘 따르기
    - 동사보다 명사 위주로 구성
    - 응용해서 다른 정보도 가져올 수 있도록 일관성 있음.
    - 띄어쓰기는 언더바( _ ) 대신 대시(-) 기호 사용
    - 파일 확장자 쓰지 말기
    - 하위 문서들을 뜻할 땐 / 기호 사용
    - * 다른곳에서 URI라는 용어를 쓰기도 하는데 URI는 자료를 넘버링하고 분류하고 지칭하는 방법. URL보다는 더 큰 의미
    - Client-server 역할구분
    - 고객들은 URL 하나만 알면 서버에 있는 자료를 갖다쓸 수 있음.
    - 서버역할 맡기거나 DB 자료 꺼내라고 하면 안됨.
    - Stateless
    - 요청들은 각각 독립적으로 처리되어야함. 1이 성공해야 2 보내주고 그런식으로 의존성이 생기면 안됨.
    - Cacheable
    - 요청을 통해 보내는 자료들은 캐싱이 가능해야함 - 이건 크롬이 잘 해줌
    - Layered System
    - 여러개의 레이어를 통해서 요청을 처리하게 만드는 것
    - Code on Demand
    - 서버는 고객에게 실제 실행가능한 코드를 전송해줄 수도 있음.

MongoDB로 DB 사용하기

  • 강의에서는 mongo DB로 했지만 실제 클래스쪽은 관계형 DB로 되어 있기 때문에 참고정도로 정리함.
  • 강의예제는 mongo DB atlas 에서 무료 호스팅 받아서 사용
  • 예제에서 사용했던 connect 함수는 현재버전으로는 레거시함수
  • 몽고DB에서 database와 collection을 만들어놓고 사용
  • insert 할 때 _id 를 써주는 이유 : 몽고DB에서는 서로 구분하기 위해 _id가 필수, 안 집어넣으면 유니크 아이디 자동생성됨.
// 설치
$ npm install mongodb
//몽고 DB 사용설정
const MongoClient = require('mongodb').MongoClient;
var db;

MongoClient.connect('접속URL', function(에러, client) {
	if (에러) return console.log(에러);
	db = client.db('todoapp')	;
	
	db.collection('post').insertOne({ 이름 : 'John', _id : 100 }, function(에러, 결과) {
		console.log('저장완료');
	});
	
	//db연결에 에러가 없으면 서버 띄우기
	app.listen(8080, function() {
		console.log('listening on 8080')
	});
});

//데이터 추가 삭제 등 다 아래의 패턴으로 사용됨
db.collection('post:컬렉션이름').insertOne();

//데이터를 꺼낼 때
db.collection('post').find()
db.collection('post').findOne()

//모든 데이터를 Array 자료형으로 가져옴
db.collection('post').find().toArray()

//데이터를 수정할 때
//단 가운데 수정할 내용일 입력할 때는 오퍼레이터가 필요함.
//ex. { $set : { totalPost : 100} } 이면 totalPost를 100으로 변경
//ex. { $inc : { totalPost : 5}} 이면 totalPost를 기존값에 5를 더하라는 것
db.collection('counter').updateOne({where에 해당}, {수정할 내용}, function(에러, 결과) {
});

EJS

  • 이것도 참고용, 리액트 쓸거니까
  • DB 실습을 위해 EJS라는 템플릿 엔진설치하고 사용
  • views 폴더내에 ejs 확장자로 된 파일을 만들어야하고, html이랑 똑같이 쓰되 변수들 가져다 쓸 때는 <%= %> 와 같은 형태로 쓰면됨. 등호는 변수 불러 쓸 때만 사용
$ npm install ejs
//server.js 
//뷰엔진으로 ejs를 사용한다는 뜻
app.set('view engine', 'ejs')

서버가 응답하는 방법 여러가지

app.get('/어쩌구', function(요청, 응답) {
	응답.send('<p>html</p>');
	응답.status(404).send('Sorry, we cannot find that!')
	응답.sendFile('/uploads/logo.png')
	응답.render('list.ejs', {보낼 데이터})
	응답.json(제이슨데이터)
});

ENV

  • 라라벨 env 파일처럼 node도 env로 관리해줄 수 있음.
  • 노드개발하면서 flow는 다 그거임 라이브러리 설치 -> server.js에 방금 설치한 라이브러리 등록하기
$ npm install dotenv
//server.js
require('dotenv').config();
  • server.js 와 같은 경로에 .env 파일을 생성해주면 됨.
  • 그 안에서 라라벨처럼 전부 대문자로 환경변수 만들어주고 값을 적으면됨.
//server.js에서 환경변수로 지정해놓은 변수를 가져다 쓸 때 
process.env.{환경변수명}
profile
재활훈련 중

0개의 댓글