프론트에서 간단하게 api 테스트를 하기 위해 노드 서버를 사용했는데, 노드몬을 사용해 node 서버를 띄울 예정이었다. 먼저 노드 서버를 세팅할 폴더를 만들어준 후 그 안에서 서버를 세팅할 예정. 이렇게 하면 최종 api가 나오기 전에 미리 테스트를 해볼 수 있어 좋은 것 같다.
1. 폴더 만든 후 npm 셋팅
먼저 폴더를 만들어준 후, 해당 경로 안에서 npm init -y를 입력해주면 node_modules 폴더가 생성된다. 그 후, npm install을 실행하면 package.json 파일까지 생성된다.
$ mkdir nodeServer
$ cd nodeServer
$ npm init -y
$ npm install
node_modules와 package.json가 생성되었다면 express와 nodemon을 설치해준다.
$ npm i nodemon -D // nodemon 설치
$ npm i express // express 설치
2. server.js 파일 생성
두가지 모두 설치를 마치고 server.js 파일을 생성한 후 아래와 같이 입력해준다.
const express = require('express');
const app = express();
const port = 5000;
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(port, () => {
console.log(`서버 실행 http://localhost:${port}`)
})
3. node server 실행
그 후 서버를 실행하기 전 package.json 스크립트를 수정해준다. 그 후, npm run dev 실행.
"scripts": {
"dev": "nodemon server.js"
},
$ npm run dev
필요한 모듈을 설치하고 서버를 실행시켰더니 다음과 같이 에러가 났다. ReferenceError: require is not defined in ES module scope, you can use import instead
$ npm run dev
> nodeserver@1.0.0 dev
> nodemon server.js
[nodemon] 2.0.20
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node server.js`
file:///C:/Users/choij/OneDrive/%EB%B0%94%ED%83%95%ED%99%94~1-DESKTOP/nodeServer/server.js:4
const express = require('express')
^
ReferenceError: require is not defined in ES module scope, you can use import instead
This file is being treated as an ES module because it has a '.js' file extension and 'C:\Users\choij\OneDrive\바탕화~1-DESKTOP-6M8PH1V-3490306\nodeServer\package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
at file:///C:/Users/choij/OneDrive/%EB%B0%94%ED%83%95%ED%99%94~1-DESKTOP-6M8PH1V-3490306/nodeServer/server.api.js:4:17
at ModuleJob.run (node:internal/modules/esm/module_job:193:25)
at async Promise.all (index 0)
at async ESMLoader.import (node:internal/modules/esm/loader:530:24)
at async loadESM (node:internal/process/esm_loader:91:5)
at async handleMainPromise (node:internal/modules/run_main:65:12)
Node.js v18.12.1
[nodemon] app crashed - waiting for file changes before starting...
해당 에러는 package.json에 "type": "module"이라고 설정되어있기 때문에 나는 에러였는데 모듈 단위로 import/export 하는 문법만 이해할 수 있도록 되어있다. 그래서 에러에서도 require 대신 import를 사용하라고 나와있었고 그래서 해당 부분을 해결하기 위해 "type": "module" -> "type": "commonjs"로 바꿔주니 해결되었다.
$ npm run dev
> nodeserver@1.0.0 dev
> nodemon server.js
[nodemon] 2.0.20
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node server.js`
서버 실행 http://localhost:5000
제대로 실행되고, 제대로 나온다~
4. json 파일 데이터 생성
서버가 제대로 실행되는 것을 확인했으니 필요한 json 데이터를 생성해 불러와보고자한다. 기존에 작업하던 폴더에 dataList.json 파일을 생성해준 후, json 데이터 몇개를 넣어줘봤다.
// dataList.json
[
{
"id": 1,
"name": "Minsu",
"age": 25
},
{
"id": 2,
"name": "Lia",
"age": 22
},
{
"id": 3,
"name": "Lay",
"age": 23
}
]
// server.js 수정
const express = require('express');
const app = express();
const port = 5000;
// 해당 부분 추가
const fs = require('fs');
const dataBuffer = fs.readFileSync('dataList 파일 경로');
const dataJSON = dataBuffer.toString();
const dataList = JSON.parse(dataJSON);
// 해당부분 수정
app.get('/data/list', (req, res) => {
res.send(dataList);
});
app.listen(port, () => {
console.log(`서버 실행 http://localhost:${port}`)
})
수정이 끝나고 서버를 재시작한 후, localhost:5000/data/list 를 입력하니 내가 넣어 놓은 데이터가 잘 들어가있는 것을 확인할 수 있다.
이런식으로 node 서버를 간단하게 셋팅하여 테스트용으로 사용하면 좋을 것 같다. 필요한 데이터가 잘 요청되는지 등을 프론트에서 확인할 수 있도록 설정하니 요청에 따른 응답을 확인해볼 수 있었다.