Node.js_Express 웹서버 만들기_1
Node.js 2021. 7. 2. 17:22(본 포스팅은 길벗의 'Node.js 교과서' 책을 공부하면서 작성되었습니다_내돈내산)
1. Express 기본 셋팅
- app.js 파일 생성하기
- npm init 명령어로 package.json 파일 생성하기
- npm i express 로 express 설치하기
- npm i nodemon -g --save 명령어로 nodemon 패키지를 전역설치하면서 package.json 에 dependencies 추가
const express = require('express');
const app = express();
app.set('port', process.env.PORT || 3000);
// express를 사용할경우 app 에 호출 method를 붙여주는 방식으로 사용이 가능하다.
app.get('/', (req, res) => {
res.send('hello express');
})
app.listen(app.get('port'), () =>{
console.log('익스프레스 서버 실행');
})
- 위와같이 require로 express를 import 시키고 express를 객체화시켜 각 router를 구조화 할 수 있도록 함.
- app.set 과 같은 명령어로 app 에 속성을 지정하고 app.get을 이용해 불러올 수 있음.
- 서버 실행은 node app.js 명령어나 nodemon app.js 등으로 시작할 수 있음.
2. Express를 이용해 html 서빙하기
const express = require('express');
const path = require('path'); // path 를 설정하기 위한 모듈
const app = express();
app.set('port', process.env.PORT || 3000);
// express를 사용할경우 app 에 호출 method를 붙여주는 방식으로 사용이 가능하다.
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname,'./index.html')); // 현재 경로를 절대경로로 표기해주기 위한 방법
})
app.listen(app.get('port'), () =>{
console.log('익스프레스 서버 실행');
})
- res.sendFile 메서드를 이용해 html 파일을 표시해주도록 함.
- res.send 또는 sendFile등 응답을 보내는 코드는 하나의 라우터가 실행될때 한번만 사용해야 한다(1요청 1응답)
- path 모듈을 사용해 html 의 경로를 표기해주도록 한다.
3. 미들웨어
- 공통적으로 실행하고 싶은 경우 미들웨어로 등록해 실행 후 다음 라우터로 넘어가도록 설계한다.
- 사용할때 인자에 next를 추가해주고, 원하는 이벤트 후 next( ) 메서드를 명시해주어야만 원하는 라우터로 찾아 넘어감
- 상단에 와일드카드라우터(/:xxx) 또는 ' * '(asterisk) 가 있을 경우 자바스크립트는 위에서 아래로 실행되기 때문에 다른 라우터가 실행되지 않을 수 있기 때문에 와일드카드가 있는 라우터는 다른 라우터들보다 아래에 위치하도록 한다.
- 에러발생시 공통적으로 접근할 수 있는 미들웨어 설정이 가능하며, 이때는 반드시 인자에 err, req, res, next 4가지가 모두 들어가야만 에러 미들웨어로 작용할 수 있다.
const express = require('express');
const path = require('path'); // path 를 설정하기 위한 모듈
const app = express();
app.set('port', process.env.PORT || 3000);
// 미들웨어 설정 >> 모든 라우터에 공통적으로 발생하게 하고싶은 이벤트를 넣는다.
// 한번에 여러개의 미들웨어를 넣어도 next()에 의해 다음으로 넘어가게 된다.
app.use((req,res, next)=>{
console.log('모든 요청에 실행하고 싶어요');
next(); // 미들웨어를 실행하고 다음 함수(일치하는)를 찾아가도록 넘겨준다.(인자도 꼭 next를 포함시켜준다)
},(req,res, next)=>{
console.log('모든 요청에 실행하고 싶어요');
next();
},(req,res, next)=>{
console.log('모든 요청에 실행하고 싶어요');
next();
},(req,res, next)=>{
console.log('모든 요청에 실행하고 싶어요');
next();
})
// express를 사용할경우 app 에 호출 method를 붙여주는 방식으로 사용이 가능하다.
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname,'./index.html')); // 현재 경로를 절대경로로 표기해주기 위한 방법
throw new Error('에러') // 강제로 에러발생
})
// 와일드카드 라우터 (:name 이 와일드카드)
// 라우터 path 가 /node/로 시작하는 모든라우터가 이쪽으로 접근하게 됨.
// 와일드카드 라우터는 코드의 아랫부분에 써주어야함.
app.get('/node/:name', (req,res) => {
let name = req.params.name
res.send(`hello ${name}`);
})
// 와일드카드가 상단에 있기 때문에 javascript를 넣어도 위의 라우터를 따라 들어가게 됨.
app.get('node/javascript', (req,res) => {
res.send('hello javascript')
})
// path에 (*)asterisk가 있는 라우터도 맨 아래에 넣어주어야 함 : 해당 method의 모든 요청을 처리하겠다는 뜻
app.get('*', (req,res) => {
res.send('hello asterisk')
})
// 에러 미들웨어
app.use((err,req,res,next) => {
console.error(err)
res.send("에러발생!!");
})
app.listen(app.get('port'), () =>{
console.log('익스프레스 서버 실행');
})
4. next 활용법
- next()에 인수가 들어있을 경우는 바로 에러처리 미들웨어로 넘어가게 된다.
app.use((req,res, next)=>{
try {
console.log('모든 요청에 실행하고 싶어요');
next();
}catch(error) {
next(error); // next인수에 값이 있을 경우는 반드시 에러처리 라우터로 넘어가게 됨.
}
})
- next('route') 를 입력할 경우 한 라우터안에 있는 나머지 코드를 뛰어넘고 동일한 다음 라우터로 넘어가게 된다.
app.get('/', (req, res, next) => {
res.send('test');
next('route');
}, (req, res) => { // next('route')에 의해 이 다음부터 뛰어넘어서
console.log('실행되나요?');
});
// 동일한 이름인 이쪽 라우터로 가서 실행시킴
app.get('/', (req, res) => {
console.log('실행된다~')
});
'Node.js' 카테고리의 다른 글
Node.js_Express 웹서버 만들기_3(미들웨어) (0) | 2021.07.04 |
---|---|
Node.js_Express 웹서버 만들기_2(미들웨어) (0) | 2021.07.03 |
Node.js_패키지 매니저(npm) (0) | 2021.07.02 |
Node.js_클러스터(Cluster) (0) | 2021.07.02 |
Node.js_쿠키와 세션 (0) | 2021.07.02 |