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 Link to heading
$ 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 Link to heading
$ express --view=pug api
Instalacja zależności Link to heading
$ cd api && npm install
Przygotowanie skryptu do uruchamiania aplikacji lokalnie Link to heading
$ echo "DEBUG=api:* npm start" > api-start-local.sh && chmod +x api-start-local.sh
Pliki w utworzonym szablonie Link to heading
$ 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 Link to heading
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 Link to heading
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 Link to heading
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 Link to heading
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 Link to heading
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;