Tartalomjegyzék

< Express

Express - Kezdés

Az Expressről

Az Express segítségével gyorsan készíthetünk webalkalmazást JavaScript nyelven, Node.js alapokon.

Kezeli a HTTP kéréseket, támogatja a middleware használatát.

VSCode

Ajánlott bővítmény a VSCode számára:

Projekt készítése

Készítsünk egy Node.js projektet:

yarn init -y

vagy:

npm init -y

A yarn parancs használata esetén, lesz egy ilyen package.json állományunk:

package.json
{
  "name": "app04",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
}

Az npm parancs esetén ez egy kicsit bővebb.

Telepítsük az express csomagot:

npm install express

Használhatjuk az pnpm parancsot is.

Hozzuk létre az app1) könyvtárban az index.js állományt, a következő tartalommal:

app/index.js
const express = require('express');
const app = express();
 
app.get('/', (req, res) => {
    res.send('helló')
});
 
app.listen(8000);

Indítsunk el a szervert:

 node app

Teszteljük curl, http vagy res paranccsal, vagy más HTTP klienssel (Postman, Insomnia, Insomnium, HTTPie).

http localhost:8000

A szervert a Ctrl+C billentyűvel állíthatjuk le.

A listen() függvény

A listen() függvény képes fogadni második paraméterként egy callback függvényt. Írjunk egy névtelen függvényt, ami kiírja milyen porton fut a szerver:

app.listen(8000, () => {
    console.log('Listening: localhost:8000');
});

Ha most elindítjuk a szervert, informál bennünket arról, hogy a localhost:8000 címen és porton figyel.

A port változóba:

const port = 8000;
app.listen(port, () => {
    console.log(`Listening: localhost:${port}`);
});

Vegyük észre, hogy console.log() paramétere már nem szimpla aposztrófok között van, helyette backtick karakterek szerepelnek. A változó behelyettesítés csak így működik.

Végpont

Most adjunk valamilyen végpontot a szerverünkhöz. Legyen például egy product nevű végpont:

app.get('/product', (req, res) => {
    res.send('termék')
});

A kódot tegyük a már meglévő app.get() függvény után.

Indítsuk újra a szervert:

node app

Teszteljük:

http localhost:8000/product

A nodemon

A nodemon (Node Monitor) lehetővé teszi, hogy ne kelljen minden fejlesztés után, újraindítanunk a szervert.

Telepítsük:

pnpm install --save-dev nodemon

Írjunk egy scriptet a package.json fájlban:

{
    "scripts": {
        "start": "nodemon app --watch app"
    }
}

Ha fut a szerver állítsuk le, majd indítsuk újra a start script segítségével:

npm start

Teszteljük az elérést:

http localhost:8000/product

Külön routing

A végpontokkal (endpoint) határozzuk meg, hogy milyen URL-en keresztül kérdezhetünk le adatokat. Az ilyen információkat nevezzük routing-nak. A routing-t kül állományba tesszük, egy routes.js fájlba.

app/routes.js
const Router = require('express');
const router = Router();
 
router.get('/product', (req, res) => {
    res.send('termék')
});
 
module.exports = router;

Az index.js fájlban importáljuk a routes.js tartalmát:

app/index.js
const express = require('express');
const app = express();
const router = require('./routes');
 
app.use('/api',router);
 
app.listen(8000, () => {
    console.log('Listening: localhost:8000');
});

Vegyük észre, hogy az URL-be bekerült egy /api rész.

Tesztelés:

http localhost:8000/api/product

JSON válasz

A routes.js fájlban határozzuk meg, hogy mit küldünk a kérésre. Eddig szimpla szöveget küldtünk. A REST API szervereket általában JSON kommunikációval használjuk.

JSON választ a json() függvénnyel készíthetünk:

app/routes.js
const Router = require('express');
const router = Router();
 
router.get('/product', (req, res) => {
    res.json({ name: 'memória'});
});
 
module.exports = router;

Metódusok

Minden HTTP metódushoz tartozik egy függvény: get(), post(), put(), path(), delete(). Vegyünk fel minden HTTP metódushoz egy routingot.

app/routes.js
const Router = require('express');
const router = Router();
 
router.get('/product', (req, res) => {
    res.json({ msg: 'get metódus'});
});
router.post('/product', (req, res) => {
    res.json({ msg: 'post metódus'});
});
router.put('/product', (req, res) => {
    res.json({ msg: 'put metódus'});
});
router.patch('/product', (req, res) => {
    res.json({ msg: 'patch metódus'});
});
router.delete('/product', (req, res) => {
    res.json({ msg: 'delete metódus'});
});
 
module.exports = router;

Teszteljük őket a http paranccsal:

http localhost:8000/api/product

http post localhost:8000/api/product

http put localhost:8000/api/product

http patch localhost:8000/api/product

http delete localhost:8000/api/product

create-sip használata

npm create sip@latest

A futtatás során a következőt láthatjuk:

npm create sip@latest

> npx
> create-sip

? Project name:  › app01

Írjuk át a projekt nevét, például api névre.

npm create sip@latest

> npx
> create-sip

✔ Project name:  … api
? Project type:  › - Use arrow-keys. Return to submit.
❯   Webpage - Simple webpage: index.html, style.css
    Web Bootstrap
    JavaScript
    Web Node.js
    ESBuild JavaScript
    ESBuild TypeScript
    hai mock API
    Express API
    Cancel

Válasszuk az Express API lehetőséget:

✔ Project name:  … api
? Project type:  › - Use arrow-keys. Return to submit.
    Webpage
    Web Bootstrap
    JavaScript
    Web Node.js
    ESBuild JavaScript
    ESBuild TypeScript
    hai mock API
❯   Express API - Express API with simple Sequelize
    Cancel

A következőket láthatjuk:

Create a new Express API...
ExpressJS REST API sablon created
Read docs/user_doc.md
Run next commands:
  cd api
  npm install
  node op key:generate
  npm run dev

Egy ilyen könyvtárszerkezetet kapunk:

api/
  |-app/
  |  |-controllers/
  |  |   |-authcontroller.js
  |  |   `-usercontroller.js
  |  |-database/
  |  |   `-database.js
  |  |-middlewares/
  |  |   `-authjwt.js
  |  |-models/
  |  |   `-user.js
  |  |-routes/
  |  |   `-api.js
  |  `-index.js
  |-config/
  |  |-default.json
  |  `-default.json.example
  |-docs/
  |  |-dev_doc.md
  |  `-user_doc.md
  |-templates/
  |-test/
  |-tools/
  |-nodemon.json
  |-op
  |-package.json
  `-README.md

Alkalmazás kulcs generálása

node op key:generate

Model létrehozása

node op create model employee

Kontroller létrehozása

node op create controller employee

Indítás

Fejlesztői szerver indítása:

npm run start

Production indítása:

npm start
1)
Az src helyett app könyvtárat használunk, mivel nincs fordítás, ez fog futni.