๐ŸŽฏ express-generator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Express ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“™ Today I Learned

Express ์‹ค์Šต

Express ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

Express ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ express-generator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

1. express-generator๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
์ƒˆ ํด๋”๋ฅผ ๋งŒ๋“  ํ›„ ํ„ฐ๋ฏธ๋„์—์„œ express-generator๋ฅผ ๊ธ€๋กœ๋ฒŒ ํŒจํ‚ค์ง€๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

$ npm install -g express-generator

2. Express ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

$ express



๐Ÿ’ก Node.js 8.2.0 ๋ฒ„์ „ ์ดํ›„
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ npx ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
npx express-generator



Express ๊ธฐ๋ณธ ๊ตฌ์กฐ

express ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“‚ bin
   โ”œโ”€โ”€ ๐Ÿ“„ www
๐Ÿ“‚ public
   โ”œโ”€โ”€ ๐Ÿ“‚ images
   โ”œโ”€โ”€ ๐Ÿ“‚ javascripts
   โ”œโ”€โ”€ ๐Ÿ“‚ stylesheets
   โ”‚      โ”œโ”€โ”€ ๐Ÿ“„ style.css
๐Ÿ“‚ routes
   โ”œโ”€โ”€ ๐Ÿ“„ index.js
   โ”œโ”€โ”€ ๐Ÿ“„ users.js
๐Ÿ“‚ views
   โ”œโ”€โ”€ ๐Ÿถ error.jade
   โ”œโ”€โ”€ ๐Ÿถ index.jade
   โ”œโ”€โ”€ ๐Ÿถ layout.jade
๐Ÿ“„ app.js
๐Ÿ“„ package.json

  • ๐Ÿ“‚ bin/ : ์„œ๋ฒ„ ์‹คํ–‰ ํŒŒ์ผ์ด ์žˆ๋Š” ํด๋”

    • ๐Ÿ“„www : ์„œ๋ฒ„ ์‹คํ–‰ ํŒŒ์ผ (์›น ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์„ค์ • ํฌํ•จ)
  • ๐Ÿ“‚public/ : ์ •์  ํŒŒ์ผ ํด๋”(CSS, JS, ์ด๋ฏธ์ง€ ๋“ฑ)

  • ๐Ÿ“‚routes/ : ๋ผ์šฐํŒ… ์„ค์ • ํด๋” ( ๊ฐ ๊ฒฝ๋กœ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ชจ๋“ˆ์ด ๋“ค์–ด์žˆ๋Š” ํด๋”)

    • ๐Ÿ“„index.js : ๊ธฐ๋ณธ ๋ผ์šฐํŠธ ( / )

    • ๐Ÿ“„users.js : ์œ ์ € ๊ด€๋ จ ๋ผ์šฐํŠธ ( /users )

  • ๐Ÿ“‚views/ : Jade (Pug) ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋”

    • ๐Ÿถerror.jade : ์—๋Ÿฌ ํŽ˜์ด์ง€

    • ๐Ÿถindex.jade : ๋ฉ”์ธ ํŽ˜์ด์ง€

    • ๐Ÿถlayout.jade : ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ

  • ๐Ÿ“„app.js : Express ํ•ต์‹ฌ ํŒŒ์ผ, ๋ฏธ๋“ค์›จ์–ด, ์ •์  ํŒŒ์ผ ์„ค์ •, ๋ผ์šฐํŠธ ๋“ฑ๋ก์„ ์ฒ˜๋ฆฌ

  • ๐Ÿ“„package.json : ํ”„๋กœ์ ํŠธ์— ์„ค์น˜๋œ ๋ชจ๋“ˆ ์ด๋ฆ„, ๋ฒ„์ „ ๋“ฑ์˜ ์ •๋ณด๋“ค์ด ์ž‘์„ฑ๋œ ํŒŒ์ผ


npm start

ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ ๋ช…๋ น์–ด npm start๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

package.json์— "scripts": { "start": "๋ช…๋ น์–ด" } ์„ค์ •์ด ์žˆ์–ด์•ผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

// package.json
{
  "scripts": {
    "start": "node app.js", 
  }
}

npm start ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด "๋ช…๋ น์–ด"๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.


๐Ÿšจ Cannot find module ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๋ฐ ํ•ด๊ฒฐ

npm start ์ž…๋ ฅ ์‹œ Error: Cannot find module 'http-errors'๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

โš ๏ธ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜

$ npm start

express-base@0.0.0 start
node ./bin/www

node:internal/modules/cjs/loader:1228
  throw err;
  ^

Error: Cannot find module 'http-errors'
Require stack:
- C:\Users\MSI\frontProject\programmers\express-base\app.js
- C:\Users\MSI\frontProject\programmers\express-base\bin\www
    at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
    at Module._load (node:internal/modules/cjs/loader:1051:27)
    at Module.require (node:internal/modules/cjs/loader:1311:19)
    at require (node:internal/modules/helpers:179:18)
    at Object.<anonymous> (C:\Users\MSI\frontProject\programmers\express-base\app.js:1:19)    
    at Module._compile (node:internal/modules/cjs/loader:1469:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
    at Module.load (node:internal/modules/cjs/loader:1288:32)
    at Module._load (node:internal/modules/cjs/loader:1104:12)
    at Module.require (node:internal/modules/cjs/loader:1311:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'C:\\Users\\MSI\\frontProject\\programmers\\express-base\\app.js',
    'C:\\Users\\MSI\\frontProject\\programmers\\express-base\\bin\\www'
  ]
}

ํ”„๋กœ์ ํŠธ์˜ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. express ์„ค์น˜๋Š” ๋งค ํ”„๋กœ์ ํŠธ ํด๋”๋งˆ๋‹ค ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ด๊ฒฐ ๊ณผ์ •
package.json์— ๋ช…์‹œ๋œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ช…๋ น์–ด npm install์„ ์ด์šฉํ•ด ํด๋” ๋‚ด์˜ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋ฐ›์•„์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™๋ฉ๋‹ˆ๋‹ค.



REST API ์‹ค์Šต

Express๋ฅผ ํ™œ์šฉํ•˜์—ฌ Map ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ„๋‹จํ•œ REST API๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

// express ๋ชจ๋“ˆ ์…‹ํŒ…
const express = require('express');
const app = express();
app.listen(3000);

// ๋ฐ์ดํ„ฐ ์…‹ํŒ…
let youtuber1 = {
  name: '์ฑ„๋„์‹ญ์˜ค์•ผ',
  subscribers: '688M',
  videoNum: 1500,
};

let youtuber2 = {
  name: '๋œฌ๋œฌ',
  subscribers: '253M',
  videoNum: 292,
};

let youtuber3 = {
  name: 'TEO ํ…Œ์˜ค',
  subscribers: '124M',
  videoNum: 1200,
};

let db = new Map();
db.set(1, youtuber1);
db.set(2, youtuber2);
db.set(3, youtuber3);

// REST API ์„ค๊ณ„
app.get('/youtuber/:id', function (req, res) {
  let { id } = req.params;
  id = parseInt(id);
  const youtuber = db.get(id);
  if (youtuber === undefined) {
    res.json({
      message: '์—†๋Š” ์œ ํŠœ๋ฒ„์ž…๋‹ˆ๋‹ค.',
    });
  } else {
    youtuber.id = id; // youtuber['id'] = id;
    res.json(youtuber);
  }
});

express ๋ชจ๋“ˆ์„ ํ†ตํ•ด ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•œ ๋’ค, ์œ ํŠœ๋ฒ„ ์ •๋ณด๋ฅผ Map์„ ์‚ฌ์šฉํ•ด์„œ ์ €์žฅํ•˜๊ณ , id๋ฅผ ํ†ตํ•ด ์œ ํŠœ๋ฒ„์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” API๋ฅผ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.




JavaScript

JavaScript ํ•จ์ˆ˜ 4๊ฐ€์ง€ ์ข…๋ฅ˜

  • ์ผ๋ฐ˜ ํ•จ์ˆ˜ ์„ ์–ธ
function add1(x, y) {
  return x + y;
}
console.log('add1(1,2) >>>', add1(1, 2)); //3
  • ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅ
let add2 = function (x, y) {
  return x + y;
};
console.log('add2(1,2) >>>', add2(1, 2));
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ (return ํ‘œ์‹œ)
let add3 = (x, y) => {
  return x + y;
};
console.log('add3(1,2) >>>', add3(1, 2));
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ (return ์ƒ๋žต)
let add4 = (x, y) => x + y;
console.log('add4(1,2) >>>', add4(1, 2));



โœ๏ธ ํ•œ ์ค„ ํšŒ๊ณ 

Express ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑ ํ•ด๋ณด๋ฉด์„œ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์™€ ์‹คํ–‰ ๊ณผ์ •์„ ์ตํž ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๊ณ , ํ•˜๋‚˜์”ฉ ํ†บ์•„๋ณด๋ฉด์„œ ๊ณต๋ถ€๋ฅผ ์—ด์‹ฌํžˆ ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

profile
๐ŸŒฑ๊ฐœ๋ฐœ ๊ธฐ๋ก์žฅ

0๊ฐœ์˜ ๋Œ“๊ธ€