Express – budowa API w Node.js

Express jest popularnym framework’iem do budowy aplikacji wykorzystujących po stronie serwera Node.js. W pakietach npm można znaleźć dedykowane dla Express narzędzia, które pozwolą nam wygenerować szkielet aplikacji. Poniżej w kilku krokach przedstawię od 0 jak wygląda budowa API w oparciu o Express i Node.js. 

Instalacja generator szkieletu aplikacji w Express

$ npm install express-generator -g

$ express --help
  Usage: express [options] [dir]
  Options:
        --version        output the version number
    -e, --ejs            add ejs engine support
        --pug            add pug engine support
        --hbs            add handlebars engine support
    -H, --hogan          add hogan.js engine support
    -v, --view <engine>  add view <engine> support (dust|ejs|hbs|hjs|jade|pug|twig|vash) (defaults to jade)
    -c, --css <engine>   add stylesheet <engine> support (less|stylus|compass|sass) (defaults to plain css)
        --git            add .gitignore
    -f, --force          force on non-empty directory
    -h, --help           output usage information

Utworzenie szkieletu projektu

express --view=pug api

Instalacja zależności

cd api && npm install

Przygotowanie skryptu do uruchamiania aplikacji lokalnie

echo "DEBUG=api:* npm start" > api-start-local.sh && chmod +x api-start-local.sh

Pliki w utworzonym szablonie

$ tree
├── app.js
├── bin
│   └── www
├── node_modules
...
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│   └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views
 ├── error.pug
 ├── index.pug
 └── layout.pug

Modułowa struktura aplikacji

W celu uniknięcia tworzenia nawet prostego, demonstracyjnego kodu w 1 pliku, dla każdej z poniżej wymienionych 4 typów obsługi żądań przygotowanego zostały 4 oddzielne pliki JavaScript ładowane w app.js:

...
var index = require('./routes/index');
var method = require('./routes/method');
var param = require('./routes/param');
var template = require('./routes/template');
...
app.use('/', index);
app.use('/method', method);
app.use('/param', param);
app.use('/template', template);
...

Obsługa najprostszego żądania

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
 res.send('REST API GET');
});

module.exports = router;

Obsługa różnych metod

var express = require('express');
var router = express.Router();

router.all('/', function(req, res, next) {
 res.send('REST API - method ' + req.method);
});

module.exports = router;

Obsługa szablonów w PUG

Kod do obsługi żądania:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
 res.render('template', { title: 'short title' });
});

module.exports = router;

Szablon w PUG:

extends layout

block content
 h1= title
 p template with title: #{title}

Obsługa parametrów żądania i formularza

var express = require('express');
var router = express.Router();

router.get('/:name', function(req, res, next) {
 res.send('REST API - method ' + req.method + ' - param ' + req.params.name);
});

router.post('/:name', function(req, res, next) {
 res.send('REST API - method ' + req.method + ' - param ' + req.params.name + ' - form ' + req.param('password'));
});

module.exports = router;

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Time limit is exhausted. Please reload CAPTCHA.