Node.js란?

장점

단점

비고

초기설정을 해보자

npm init -y
npm install express
// package.json이 있는 위치에 server.js 파일을 만들고 아래 내용을 입력

// express 라이브러리 사용 설정
const express = require('express')
const app = express()

// 서버 생성 코드
app.listen(8080, () => {
    console.log('http://localhost:8080 에서 서버 실행중');
})

// 서버 기능
app.get('/', (request, respond) => {
    respond.send("Hello world") // 콜백함수
})
node server.js

참고

npm install -g nodemon
// 설치 이후
nodemon (파일명)
// 이러면 실시간으로 새로고침 해주는 웹사이트를 확인할 수 있다.
// server.js
app.use(express.static(__dirname + '/public'));

// 이후 다른 페이지에서 public폴더 안에있는 스테틱 파일들에 접근이가능하다.
// index.html
<link href="/main.css" rel="stylesheet">

이전에 만든 React 프로젝트를 node.js로 띄워보자

const express = require('express'); // express 라이브러리 사용 설정
const app = express(); // express 라이브러리 사용 설정
const path = require('path'); // 루트 path경로를 가져오는 라이브러리

app.use(express.json()); // 유저가 보낸 array/object 데이터를 출력할 수 있는 설정
var cors= require('cors'); // 다른 도메인주소끼리 ajax 요청을 주고 받을때 사용하는 라이브러리
app.use(cors());

//React의 build폴더를 불러오자
app.use(express.static(path.join(__dirname, 'shop/build')));

// 서버 생성 코드
app.listen(8080, () => {
    console.log('listening on 8080');
})

// 참고. 리엑트와 node js의 파일 전송을 원할히 하려면 아래설정을 하는게 좋다.
// 1. express.json
app.use(express.json()); // 유저가 보낸 array/object 데이터를 파싱하여 js객체로 변환해주는 미들웨어

// 2. CORS (Cross-Origin Resource Sharing) 
var cors= require('cors'); 
app.use(cors());// 다른 도메인주소끼리 ajax 요청을 주고 받을때 사용하는 미들웨어
// 나중에 로컬에서 각각 연결해서 개발을 진행할때 유용하다.

//리엑트 라우터를 사용하는 경우
app.get('*', (request, respond)=> {
    respond.sendFile(path.join(__dirname, 'shop/build/index.html'));
})

// 비고: restful api 는 다음과같이 만들면된다.
app.get('/product', function(request, respond) {
    respond.json({name : 'black shoes'}); //해당중에 DB query를 해와 보내주면된다.
})

참고. 동일한 도메인에 다른 html을 보여주고 싶은경우

// server.js

app.use( '/', express.static( path.join(__dirname, 'public') ))
app.use( '/react', express.static( path.join(__dirname, 'react-project/build') ))

app.get('/', function(request,respond){
  respond.sendFile( path.join(__dirname, 'public/main.html') )
}) 
app.get('/react', function(request,respond){
  respond.sendFile( path.join(__dirname, 'react-project/build/index.html') )
})
// 리액트프로젝트 내의 package.json
{
  ...
  "homepage": "/react",
  "version": "0.1.0",
  ...
} 

▲ 리액트 프로젝트 내의 package.json에 homepage url을 라우팅과 동일하게 설정해주면된다.