Express 프로젝트를 시작해 봅니다. 터미널에 아래 명령어들을 입력합니다
# npm project를 초기화합니다
npm init -y
# Express 설치
npm i express
# Dev-Dependencides
npm i -D nodemon
npm i
와 npm i -D
의 차이점은 개발을 하기 위해서만 사용하는 경우에는 npm i -D
로 설치를, 이외에는 npm i
를 이용해 설치를 해주면 됩니다.
nodemon
모듈은 서버 코드에 변경사항이 생기면 서버를 자동으로 재시작해주는 모듈입니다. 그러면 package.json
파일에 아래와 같이 설치된것을 볼 수 있습니다.
"dependencies": {
"express": "^4.18.1"
},
"devDependencies": {
"nodemon": "^2.0.20"
}
nodemon
으로 서버를 시작하기 위해서는 scripts
에 명령어 등록을 해주어야 합니다. scripts
에는 해당 app에서 사용할 다양한 명령어들을 정의해두는 부분입니다. scripts
에 정의된 명령어는 npm run (명령어)
형태로 실행이 됩니다 app.js
파일을 실행해야 하므로 nodemon app.js
명령어를 실행하는 start
라는 명령어를 등록해보겠습니다.
"scripts": {
"start": "nodemon app.js"
},
app.js
를 생성하고, 아래 코드를 작성 후 해석해 봅니다.
const express = require('express')
const app = express()
app.set('port',process.env.PORT || 3000)
app.get('/',(req,res) => {
return res.send("<h1>Hello world</h1>")
})
app.listen(app.get('port'),()=>{
console.log(`Listening on port ${app.get('port')}`)
})
Express모듈을 실행해 app변수에 넣습니다. Express모듈은 내부적으로 http모듈이 내장되어 서버역할을 할 수 있습니다.
app.set('key','value')를 이용해서 데이터를 저장할 수 있습니다. 저장한 값은 app.get('key')을 통해서 가져올 수 있습니다. 여기서는 app.set('port',process.env.PORT || 3000)
을 통해서 port
를 설정하는 부분입니다. process.env.PORT
를 통해 환경변수의 PORT
변수를 검사하고, 없다면, 3000을 default로 설정합니다.
app.get('address','Router')는 주소에 GET
요청이 들어올 때 어떤 값을 반환할지에 대한것을 정의하는 부분이다. req
는 요청에 대한 객체, res
는 응답에 대한 객체입니다. node.js의 http메소드에 봤던 res.write
, res.end
대신 res.send
를 사용하면됩니다. GET이외에도 POST,PATCH,PUT,DELETE 모두 있습니다.(app.post(),app.patch()....etc)
app.listen()은 포트를 연결한 후에 서버를 실행합니다. 이는 웹서버와 동일합니다.
Express서버를 실행시켜 봅니다. npm run start
를 입력한 후 localhost:3000
을 브라우저에서 접속해봅니다.
res
객체의 send()
메소드를 사용해서 html텍스트를 전송해도 좋지만, html파일 자체를 전송할 수 도 있습니다. html파일을 전송하기 위해서는 sendFile()
메소드를 사용하면 됩니다.
하나의 조건을 추가해서 작성해 봅니다. /htmlfile
이라는 주소에 GET요청으로 접속을 하여 html파일을 띄운다고 가정을 해보겠습니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Router /htmlfile</h1>
<p>This is page from html file</p>
</body>
</html>
const path = require('path')
app.get('/htmlfile',(req,res) => {
return res.sendFile(path.join(__dirname,'index.html'))
})
이제 localhost:3000/htmlfile
에 접속해 봅니다.
`