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/
터미널로 프로젝트를 생성할 폴더에 접속하여 다음을 입력한다.
$ npm install express-generator -g
그러면 기본적인 폴더와 파일 뼈대가 생성된다.
그다음 터미널에 추가로 입력한다.
express --view=ejs myapp
그 다음 npm install
을 입력한다.
출처: https://expressjs.com/ko/starter/generator.html
Node Package Manager: Node.js 프로젝트를 관리하는 필수적인 도구
온라인 저장소 + 커맨드라인 도구
https://www.npmjs.com/
-> 필요한 package를 검색, 설치 및 활용
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 install --production
npm install [package-name] --global
반복되는 B라는 코드를 모듈화 하여 분리하여 편리하게 사용
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
으로 실행
package.json에 script 부분 start만들어준다음에
npm start
입력 -> 브라우저 localhost:3000, localhost:3000/users 입력
HTTP 요청에 따라 알맞은 응답을 보내주는 경로를 설정해주는 일
router.get('/', (req, res, next) => {
console.log('test next');
})
app 라우팅: http method를 전부 지원
router.get('/member/:id', (req, res) => {
const member = req.params.id;
console.log(member);
res.send(`${member}`);
});
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
RDB와는 다르게 Database, Collection, Document로 이루어져있다.
const result = await collection.insertOne(doc)
doc이라는 자바스크립트 객체를 db에 삽입한다.
result에는 생성된 데이터의 id값이 할당된다.