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;