Pourquoi ne pas le feu express Middleware quand il est précédé par app.use (express.static (path.join (...)));

voix
0

Je suis en train de de-bug un problème dans mon boilerplate back-end express très simple. J'ai un middleware universel que je veux tirer avec toutes les demandes qui frappe le serveur (essentiellement, je suis juste essayer de définir un cookie.)

const express = require('express');
const path = require('path');
const uuidv4 = require('uuid/v4');
const cookieParser = require('cookie-parser')

const app = express();
app.use(cookieParser());

app.use(express.static(path.join(__dirname, 'client/build')));

app.use('/', (req, res, next) => {
    console.log(req.cookies)
    if (!req.cookies['audience_tracking_id']) {
        console.log('Processed Request - User Does Not Have Cookie.')
        const uniqueID = uuidv4();
        res.setHeader('Set-Cookie', [`audience_tracking_id=${uniqueID}`, `contentFocus=${randomProductName()}`]);
    }
    next();
});


app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname + '/client/build/index.html'))
});

app.use(function(err, req, res, next) {
    console.log(err)
    res.status(err.status || 500).send();
});

const port = process.env.PORT || 6000;

app.listen(port);

console.log(`Audience Service Host listening on ${port}`);

L'application comprend un React frontal qui est hébergé sur Heroku, et je suis au service des fichiers de construction statiques par express dans le même conteneur.

La question est - Que j'utilise Postman pour envoyer localement une requête GET à ce fichier dans localhost: 6000, ou si je avoir accès au conteneur sur Heroku, le console.log()manque à feu - et peut - être le reste du middleware.

Cependant, si je me déplace cette ligne en dessous du middleware cookie:

app.use(express.static(path.join(__dirname, 'client/build')));

OU, Si je commente juste, mon feu de middleware et la console.log () apparaît. Il était une solution simple, mais je ne sais pas pourquoi cela se produit en fait, personne ne sait ce que je fais de mal à ce code qui rend le middleware manquai tel quel?

Créé 20/10/2018 à 03:25
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Il est parce que votre middleware « fichier statique » va essayer de faire correspondre toutes les demandes à votre serveur:

app.use(express.static(path.join(__dirname, 'client/build')))

Votre demande "GET localhost: 6000 / *" sera routage vers "fichier statique" middleware avant "cookie" middleware. Si le fichier « statique » middleware trouver le fichier existe, la réponse sera fin avec le fichier. Dans le cas contraire, l'action du middleware est l'option concernent (fallthrough), vous pouvez obtenir plus de détails sur l'option de serveur statique

Je suggère de mettre en chemin de montage racine pour middlware fichier statique :

app.use("/dist", express.static(path.join(__dirname, 'client/build')))

Si vous voulez vérifier cookie dans toute demande, utilisez ce format:

app.use((req, res, next) => {
    // Do something
})
Créé 20/10/2018 à 03:50
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more