다음을 통하여 express를 사용할 수 있다.
const express = require('express');
let app = express();
express는 CJS로만 작동한다.
ESM를 일절 제공하지 않아서, package.json등에서 type을 module로 한 경우, .cjs확장자를 사용해서 CJS를 사용한다는 점을 인지시켜야 한다.
다음 항목을 사용하지 않으면, 서버로서 동작하지를 않는다.
app.use(express.static(path.join(__dirname, '../dist')));
app.listen(process.env.PORT || port, () => {
console.log("Express server listening");
});
가이드 문서를 통하여 조금 더 자세히 알아본다.
간단하지만 기본적으로 여러 레벨에서 사용할 수 있는 강력한 기능을 제공하며 다음 레벨에서 동작시킬 수 있다.
여기서는, 기본 제공 미들웨어만을 살펴본다.
Express의 유일한 기본 제공 미들웨어 함수는 express.static입니다. 이 함수는 serve-static을 기반으로 하며, Express 애플리케이션의 정적 자산을 제공하는 역할을 합니다.
기본 제공 미들웨어에서는 옵션을 포함한 정적 자원을 제공할 수 있다.
여기서는 ../dist
폴더를 자원폴더로 하였다.
../dist
폴더는 webpack이 front-end 쪽 코드를 Build 하였을 때, Build한 결과물이 출력되는 폴더이다.
즉, 이 서버는 front-end 웹 어플리케이션 빌드 결과물을 자원으로 제공하는 것이다.
app.use(express.static(path.join(__dirname, '../dist')));
다음 예제에서 간단한 예제와 함께 이것이 무엇을 하는 함수인지 설명한다.
const port = 3000
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
앱은 서버를 시작하며 3000번 포트에서 연결을 청취합니다.
단, Heroku에서 위 코드는 동작하지 않는다.(관련 링크) 다음과 같이 기재해야 한다.
const port = 3000
app.listen(process.env.PORT || port, () => {
console.log(`Example app listening on port ${port}`)
});
다음 링크를 참조하여, express에서 URL에 기재된 [?기호](질의 문자열)를 사용할 수 있다.
아래 코드는 /request 경로로 받아온 get요청의 질의문을 가져와, 똑같은 string을 만드는 코드이다.
const express = require('express');
let app = express();
let resultQuery =
'?' +
encodeURIComponent('serviceKey') +
'='+
'나의 서비스 키'; /*Service Key*/
const url = "요청 url"; /*URL*/
//GET
app.get('/request', (req, res) => {
//URL로부터 받은 질의문을 분석
let pageNo = req.query.pageNo;
let numOfRows = req.query.numOfRows;
let type = req.query.type;
let CTPRVN_NM = req.query.CTPRVN_NM;
let SIGNGU_NM = req.query.SIGNGU_NM;
//질의문 그대로 똑같이 만들기
resultQuery += "&pageNo=" + pageNo
+ "&numOfRows=" + numOfRows
+ "&type=" + type
+ "&CTPRVN_NM=" + CTPRVN_NM
+ "&SIGNGU_NM=" + SIGNGU_NM
const result = url + resultQuery;
console.log(result);
})
req.query를 통해, 요청으로 온 URL의 질의문의 값을 가져올 수 있다.
express에서 http메시지를 보낼 수 있다.
get함수에서 제공하는 Request / Response 인자를 통해서 간편하게 보낼 수 있다.
app.get('/request', (req, res) => {
//URL로부터 받은 질의문을 분석
let pageNo = req.query.pageNo;
let numOfRows = req.query.numOfRows;
let type = req.query.type;
let CTPRVN_NM = req.query.CTPRVN_NM;
let SIGNGU_NM = req.query.SIGNGU_NM;
//질의문 그대로 똑같이 만들기
resultQuery += "&pageNo=" + pageNo
+ "&numOfRows=" + numOfRows
+ "&type=" + type
+ "&CTPRVN_NM=" + CTPRVN_NM
+ "&SIGNGU_NM=" + SIGNGU_NM
const result = url + resultQuery;
res.send(result);
})
위는 예시이며, 보통 get시에 데이터를 불러오려면 시간이 걸리는 관계로, promise등을 사용하여 비동기화하는 것이 낫다.
(작성중)