In questa fase viene effettuata una richiesta GET al sito in WooCommerce utilizzando l'endpoint /wp-json/wc/v2/products
con le credenziali di accesso. Lo scheletro della nostra App è il seguente:
'use strict';
const express = require('express');
const fs = require('fs');
const https = require('https');
const port = process.env.PORT || 3000;
const app = express();
const routes = require('./routes');
const API = require('./lib/API');
const sslOptions = {
key: fs.readFileSync('privkey.pem'),
cert: fs.readFileSync('fullchain.pem')
};
app.disable('x-powered-by');
app.set('view engine', 'ejs');
app.use( (req, res, next ) => {
req.API = API;
next();
});
// Qui le route
app.get('/products', routes.products);
https.createServer(sslOptions, app).listen(port);
La gestione delle chiamate alle API è affidata alla classe API
che abbiamo reso disponibile in tutte le route della nostra App tramite la funzione di middleware definita in .use()
. In questo modo ora l'oggetto request
ha un riferimento a tale classe visibile per tutto il ciclo di vita dell'applicazione.
La classe è molto semplice. Inizia richiedendo il modulo WooCommerce e definendo le opzioni di base:
'use strict';
const WC = require('woocommerce');
const WooCommerce = new WC({
url: 'https://ecommerce.com',
ssl: true,
consumerKey: 'ck_123456789abcd',
secret: 'cs_abcdefg12345'
});
Ora viene il corpo della classe:
class API {
static products() {
return WooCommerce.get('/products');
}
}
module.exports = API;
Il metodo statico products()
restituisce una Promise che puo avere due risultati:
- La richiesta ha successo e la Promise si risolve con un array di prodotti in formato JSON.
- La richiesta fallisce e la Promise restituisce un errore generato dal modulo WooCommerce.
Lo useremo in questo modo nella route specifica:
'use strict';
// routes/index.js
module.exports = {
products: (req, res) => {
req.API.products().then(data => {
res.render('products', {products: data.products});
}).catch(err => {
res.json(err);
});
}
};
Il risultato viene mostrato di seguito.