npm init
을 해준다.npm install express
를 한다.node app.js
로 서버를 실행시킨다.// 공홈의 예제
//express로드 , 이를 통해 express모듈을 제어한다.
const express = require("express");
//express()가 application함수를 로드한다. 그것을 app변수에 선언하여 어플리케이션을 만든다.
const app = express();
//포트 지정
const port = 3000;
//middleware이다.
//client가 "/"경로에 get 요청을 보내면
//req는 요청객체, res는 응답객체 이다.
app.get("/", (req, res) => {
//응답 콜백 함수
//"Hello World"를 보내 화면에 출력한다.
res.send("Hello World!");
});
//middleware
//port에 접속 성공하면 콜백 함수를 실행시킨다.
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
npm install nodemon
// "/"경로에 get요청 처리 middleware
app.get("/", (req, res) => {
// res.sendFile()을 통해 안의 경로에 있는 파일이 띄워진다.
// __dirname = 요청 파일의 경로를 단축시켜주는 절대경로 (현재 실행 중인 폴더 경로이다.)
// __dirname + /src/index.html 파일을 보낸다.
res.sendFile(__dirname + "/src/index.html");
});
<!-- post method는 서버로 데이터를 전송하는 기능이다.-->
<form action="post" method="post">
input : <input type="text" name="input" /><br />
submit : <input type="submit" />
</form>
출력 모습
제출한 데이터를 받아서 처리하는 모듈인 body-parser를 설치한다.
npm install body-parser
app.js에서 post요청 처리를 위한 코드를 작성한다.
//body-parser 로드
const bodyParser = require("body-parser");
//middleware추가
// 브라우저에서 오는 응답이 json 일수도 있고, 아닐 수도 있으므로 urlencoded() 도 추가한다.
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post("/post", (req, res) => {
// 브라우저에서 받은 데이터는 req.body 에 저장된다.
res.send("<h1> welcome! </h1>" + req.body.input);
});
//fs모듈 로드 (file-system)
const fs = require("fs");
let homeContents = {};
// data 폴더 안에 들어있는 json 파일들을 파싱하여 객체 안에 넣는다.
homeContents = JSON.parse(
fs.readFileSync(__dirname + "/src/data/homeContents.json", "utf-8")
);
app.get("/homeContents.json", (req, res, next) => {
res.json(homeContents);
});
출력 모습
다음으로 homeContents.json 안에서 원하는 프로퍼티(이미지)만 화면에 출력해보자
먼저 html에 파싱한 데이터를 보여줄 태그를 추가해준다.
<div class="content"></div>
<!-- script파일 추가 -->
<script src="./sample.js"></script>
//img를 넣을 태그
const content = document.querySelector(".content");
// fetch()를 통해 괄호 안 url의 데이터를 변수에 저장한다.
const item = fetch("http://localhost:3000/homeContents.json")
// fetch api는 promise를 기반한다.
// then 메서드로 fetch의 반환값 res를 받아 이를 json형태로 변환한다.
.then((res) => res.json())
// 받은 데이터를 innerHTML 한다.
.then(
(json) =>
(content.innerHTML = `<img src="${json.contents[0].eventContent.imgurl}">`)
);
node.js로 개발 환경을 세팅하고, 클라이언트와 서버가 통신하는 여러가지 방법에 대해 실습해 보았다.
이 글의 핵심은 fetch api를 통하여 ajax통신을 하고, 그것을 express server로 반환해 화면에 추가하는 것이었다.