본문 바로가기
Node.js

node js - Express.js

by 반오십 코린이 2022. 9. 20.
728x90

Express.js


- Node.js의 웹 프레임워크 중 가장 유명한 웹 프레임워크

필요에 따라 유연하게 구조 설정 가능

다양한 미들웨어를 통해 필요한 기능을 간단하게 추가 가능.

모든 동작이 명시적으로 구성되기 때문에

웹 프레임워크의 동작 방식을 이해하기 가장 좋은 프레임 워크

const express = require('express') // express.js 가져오기
const app = express() // 객체 만들기

app.get('/', (req,res) => { //만든 객체를 통해 동작 수행
	res.send('Hello World!");
});

app.listen(3000);

 express-generator with npm

$npm i -g express-generator
$express my-web
$cd my-web
$npm i
$npm start

express-generator with npx

$npx express-generator my-web
$cd my-web
$npm i
$npm start

 


my-web의 구성 by.elice

app객체


app 라우팅

app.get('/', (req, res) => {
	res.send('GET /');
});
app.post('/', (req, res) => {
	res.send('POST /');
});
app.all('/all', (req, res) => {
	res.send('ANY /'); //<- 어떤 method건 상관없이 뒤에 있는 함수를 실행해라. (res.send 부분) 
});

Express.Router - router는 app가 유사하지만 일반적 으로 모듈로 만들어서 사용한다.

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

router.get('/', (req,res,next) => {
	res.send('respond with a resource');
});
//해당 url로 get방식으로 접근할 경우 뒤의 미들웨어가 실행될 수 있게 등록
router.get('/getlist', listcontroller.getList);

module.exports = router;

 


라우팅 path parameter 사용

/users/:id-/users/123,/users/456
/messages/:from-:to -/message/123-456

Requset Hadler

- 라우팅에 적용되는 함수를 의미

-HTTP 요청과 응답을 다룰 수 있는 함수로 설정된 라우팅 경로에 해당하는 요청이 들어오면

Request Handler 함수 실행

//매개변수 부터 함수 메인 내용까지를 가르킴
router.get('/:id, (req,res) => { 
	const id =req.params.id
    res.send(`hello ${id}`);
});

Response 객체

HTTP 응답을 처리하는 객체

HTTP 응답의 데이터를 전송하거나, 응답 상태 및 헤더를 설정할 수 있음


1. req.params (path parameter)

app.get('/say/:greeting', (req, res) => {
    const { greeting } = req.params;
    res.send(greeting);
});

url 표현식에서 '/say/:greeting'이라고 입력한 부분에서 

: 부분을 주목하자. 해당 코드에는 greeting 부분을 따올때

req.params이라는 method를 사용해서 담게된다.

 


Router 사용하기

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

app.get('/', (req, res) => {
    res.send("OK");
});

//routes directory에 위치한 users 모듈을 불러온다.
const userRouter = require('./routes/users'); 
//가져온 users 모듈을 /users 경로로 연결한다.
app.use('/users', userRouter); // app.use method는 해당 url에 있는 모든 url parsing case 들과
연결한다.
app.get('/users', userRouter); // 이경우 해당 url에 get방식만 해당.

app.listen(8080);

작성된 라우터 모듈을 app에 use 함수로 연결하여 사용가능

router 객체에도 하위 라우터를 use 함수로 연결하여 사용 가능

const userRouter = require('./routes/users');
const app = express();
//해당 url 경로일 경우 다음 모듈이 담당한다.
app.use('/users', userRouter);

const petRouter = require('./pets');
const router = express.Router();

router.use('/pets', petRouter);

module.exports = router;

 

//Router라는 변수에 우측 값을 할당한다라는 의미로 보면된다.

const {Router} = require('express'); 

const Router = require('express');

//객체로 예시를 직관적으로 살펴보면
let object ={
    a : "aaaa"
};
// const a = object.a; 기존 javascript 문법
//object에 담겨있는 값 a를 받아온다라고 보면 될듯.
const {a} = object;

//다음과 같은 문법을 구사할 수 있다.
const object = { a: 1 };
const { a, b = 2 } = object;

index.js

const express = require('express');

const userRouter = require('./routes/users');

const app = express();

app.get('/', (req, res) => {
    res.send("OK");
});

/* 라우터를 '/users' 경로에 연결 */
app.use('/users', userRouter);

app.listen(8080);

users.js

// default url은 /users이다.

const { Router } = require('express');
const petsRouter = require('/pets'); // 이 친구는 단순히 pets router가 담겨있는 경로를 가르킨다고 생각
const router = Router();

router.get('/', (req, res) => {
  res.send('GET /users');
});

/* /:userId/pets 경로에 petsRouter 연결 */
router.use('/:userId/pets',petsRouter); ///:userId/pets 이 url은 내 관할 구역이 아니다.
// 대신 petsRouter을 연결해주겠다.
module.exports = router;

pets.js

const { Router } = require('express');

const router = Router({ mergeParams: true });

/* GET 라우팅 추가 */
router.get('/', (req, res) => {
  const { userId } = req.params;
  res.send(`Pets of user ${userId}`);
});

module.exports = router;

res.render

 

// res.render("ejs 파일경로",{데이터이름:전송할 데이터}
res.render('index', {title: 'test', rows: rows});
728x90