엘리스 26일차 월요일 실시간강의 Node.js

치즈말랑이·2022년 5월 9일
0

엘리스

목록 보기
27/47
post-thumbnail

박두현 코치님 강의

nodemone과 비슷한 기능
-> lite-server
npm install lite-server --save-dev
https://www.npmjs.com/package/lite-server

nodemon vs. lite-server 차이점
https://stackoverflow.com/questions/54388825/what-is-the-difference-between-nodemon-and-live-server

package-lock.json의 의미
https://hyunjun19.github.io/2018/03/23/package-lock-why-need/

express generator

터미널로 프로젝트를 생성할 폴더에 접속하여 다음을 입력한다.
$ npm install express-generator -g
그러면 기본적인 폴더와 파일 뼈대가 생성된다.
그다음 터미널에 추가로 입력한다.
express --view=ejs myapp

그 다음 npm install을 입력한다.
출처: https://expressjs.com/ko/starter/generator.html

NPM

Node Package Manager: Node.js 프로젝트를 관리하는 필수적인 도구
온라인 저장소 + 커맨드라인 도구
https://www.npmjs.com/
-> 필요한 package를 검색, 설치 및 활용

npm 대표 명령어

npm init: 프로젝트 생성 (초기화) -> package.json 파일 생성, 프로젝트 이름, 버전 등을 설정, Scripts는 실행 명령어 관리 ->

"start": "node ./bin/www"

npm install: package 설치(의존성 추가)
npm remove: package 삭제
npm start: 프로젝트 (스크립트) 실행

node_modules: 프로젝트 package 저장하는 디렉토리
package.json: 프로젝트 관리
package-lock.json: package(의존성, dependency, 관리)

npm install [package-name] --save-dev

  • npm의 개발용 의존성을 분리하여 관리하는 방법
  • 배포전 개발용으로만 사용하는 의존성
  • Package.json의 devDependencies에 추가됨

npm install --production

  • 프로젝트 배포할때 개발용 의존성 포함할 필요가 없을 경우
  • Package.json의 dependencies만 node_modules에 내려받음

npm install [package-name] --global

  • 프로젝트에 종속되지 않는 커맨드라인 도구 설치
  • 전역 패키지 디렉토리에 내려받음

module 기본 개념

반복되는 B라는 코드를 모듈화 하여 분리하여 편리하게 사용

  • 프로젝트가 커질 수록 반복되는 코드의 사용을 효율적으로 관리
  • NPM package 들이 모듈로 형성되어 있다
  • Node.js 기본 내장형 모듈 vs 외부를 통한 외장형 모듈

module 실습

  • 기본적으로 module.exports를 활용하여 모듈화가 가능
  • 완성된 모듈은 require를 통해 호출하여 사용 가능
  • 최종 확장자 .js는 생략 가능
  • require('./[폴더이름]/모듈')
  • require('../[상위폴더이름]/모듈')
module 다른언어에서는 library

중복되는 기능, 계속해서 사용
1~2개 코드 반복적으로 사용할 수 있게

cal.js

// 덧셈, 뺄셈, 곱셈

// 덧셈

function add(a,b) {
    return a + b;
}

const sub = (a, b) => {
    return a - b;
}

const mul = (a, b) => {
    return a * b;
}

const num = 123;
const doc = "Hello";

// module.exports.add1 = add; // add를 빼서 add1라고 하겠다.
// module.exports.sub = sub;
// module.exports.mul = mul;

module.exports = {
    add: add,
    sub: sub,
    mul: mul,
    
} // database 입력
let number = 0;

module.exports = () => {
    return number += 1;
}
// 기본 실행.

const cal = require("./cal");
const func = require("./func");
// require 한번 호출하고 사라짐
// 한번 호출 -> 보관 -> 바로 삭제
console.log(cal.add(5, 3));
console.log(cal.sub(5, 3));
console.log(cal.mul(5, 3));

console.log("시작", func());

for (let i = 0; i < 10; i++) {
    console.log(func());
    // 10번 호출
}
console.log("끝", func());

node app 으로 실행

  • Module은 첫 require시에만 실행하고 cache 됨
  • 여러번 실행할 모듈은 함수형으로 작성 호출
  • 함수로 호출하는것을 잊지 말것

Express.js

웹 프레임워크

  • 웹 서비스를 구성하기 위한 필수 구조 요소를 빠르게 제작 가능
  • HTTP 요청, 응답, HTML 템플릿 엔진, MVC 구조 제공
  • 프로젝트 구조에 대한 부담을 줄이고 코드에 집중

Express.js 생성

  1. npm instsall express-generator-g
  2. express --view=ejs myapp
  3. cd myapp
  4. npm install
  5. npm start
    이때는 npm init안해도됨

package.json에 script 부분 start만들어준다음에
npm start 입력 -> 브라우저 localhost:3000, localhost:3000/users 입력

라우팅

HTTP 요청에 따라 알맞은 응답을 보내주는 경로를 설정해주는 일

router.get('/', (req, res, next) => {
	console.log('test next');
})
  • 통신의 기본 구성은 요청 (req, request), 응답 (res, response)
  • 요청과 응답 사이클에서 함수의 기능을 한다.
  • next를 통해 다음 동작 여부를 결정한다.
    아래에 작성된 라우터 함수를 실행시킴


app 라우팅: http method를 전부 지원

parameter 사용방법

router.get('/member/:id', (req, res) => {
    const member = req.params.id;
    console.log(member);
    res.send(`${member}`);

});

라우팅 - path parameter

Express.js 라우팅은 path parameter를 제공
path parameter를 사용하면, 주소의 일부를 변수처럼 사용할 수 있음
object의 형태로 들어온다. 그래서 params.id 이렇게 씀
ex)
/users/:id
/messages/:from-:to

call.js

const express = require("express");
const router = express.Router();

router.get('/', (req, res, next) => {
    console.log('test express');
    res.send('hello express');
    // 소모임, 신회원등급 햇을때 화면이끊기지않게 하기위해
    // db => db 접근 후 => 회원등급 넘버 ++ 변경 후 => 화면
    // next보다는 async/await를 더 많이씀
    next(); // 현재 미들웨어의 기능을 마치고 다음 미들웨어로 연결해준다.
});

router.get('/', (req, res, next) => {
    console.log('2nd express');
    // 화면이 나와야함
});

router.get('/member/:id', (req, res) => {
    const member = req.params.id;
    console.log(member);
    res.send(`${member}`);

});

// Single thread 기반으로 빠르게 처리하는.. -> 80% 만 맞는말

// api 문서
// 함수
// post url /test/member/:id => 회원의 id로 한다. 회원의 db key로 한다.

module.exports = router; // => app.js

app.js

const testRouter = require('./routes/call');
app.use('/test', testRouter);

코치님 강의

var http = require("http");
var fs = require('fs');

function onRequest(req, res) {
  res.writeHead(200, { "Content-Type": "text/html" });

fs.readFile('./index.html', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
    res.write(data);
    res.end();
});
}
http.createServer(onRequest).listen(8080);

writeHead는 setHeader와 setStatus를 합쳐놓은것이다.
https://nodejs.dev/learn/build-an-http-server
fs에 대한 정보: https://nodejs.dev/learn/reading-files-with-nodejs
node.js 백엔드 정보 :https://araikuma.tistory.com/453

mongoDB

RDB와는 다르게 Database, Collection, Document로 이루어져있다.
const result = await collection.insertOne(doc)
doc이라는 자바스크립트 객체를 db에 삽입한다.
result에는 생성된 데이터의 id값이 할당된다.

profile
공부일기

0개의 댓글