In ExpressJS è possibile effettuare dei redirect HTTP con facilità.

Il metodo res.redirect() effettua un redirect HTTP sul percorso o URL specificato. Accetta due parametri: il primo è il codice
dello status HTTP, che in modo predefinito è 302, il secondo è la destinazione del redirect.

Questo secondo parametro può essere sia un URL relativo alla nostra app che un URL assoluto. Ad esempio per effettuare il redirect 301 di un intero sito, scriveremo:


'use strict';

const app = require('express')();

app.get('/', (req, res) => {
    res.redirect(301, 'https://sito.tld');
});

app.listen(3000);

Qui stiamo usando un URL assoluto. In altri casi, come ad esempio un login utente, useremo un URL relativo:


'use strict';

const app = require('express')();

app.post('/login', (req, res) => {
    // Procedura di login
    if(isValidLogin) {
        res.redirect('/account');
    }
});

app.listen(3000);

In questo caso si tratta di un redirect interno alla nostra applicazione, quindi il percorso viene calcolato in modo relativo e il codice di status è 302.

Veniamo ad un caso pratico. Supponiamo di dover migrare un sito esistente in Node.js cambiando la struttura degli URL originaria ma preservando l'indicizzazione dei vecchi URL usando
un redirect 301. La struttura degli URL degli articoli orirginari è la seguente:


sito-originario.tld/2019/04/titolo-articolo

Vogliamo trasformarla nella seguente struttura:


sito-destinazione.tld/articoli/titolo-articolo.html

Per prima cosa definiamo la route che gestirà il redirect 301 degli URL orirginari. Quindi definiamo la route della nuova struttura:


'use strict';

const app = require('express')();

app.get('/:year([0-9]{4})/:month([0-9]{2})/:slug', (req, res) => {
    let base = 'https://sito-destinazione.tld/articoli/;
    let dest = base + req.params.slug + '.html';
    res.redirect(301, dest);
});

app.get('/articoli/:slug\.html', (req. res) => {
    //...
});

app.listen(3000);

Come si può notare, tramite i parametri delle route basati su espressioni regolari riusciamo a gestire i nuovi URL con facilità.