Bonjour à tous,
Pour m'amuser un peu et voir autre chose que du JavaEE/Spring et du PHP/Symfony, j'essaie de faire un mini site web avec Node.js et Express 4.
Je n'ai même pas commencé à faire quelque chose de vraiment intéressant que je suis déjà coincé par un problème très con. Dès lors que j'ajoute certains middlewares génériques, le serveur ne répond plus, et j'obtiens alors systématiquement une page blanche ou alors un serveur introuvable provenant du navigateur.
Dans tous les tutoriaux et exemples que je vois sur le net, ces middlewares sont faits pour être chaînés, et pour être génériques (i.e. s'appliquer à toutes les requêtes / ils déterminnent tout seuls s'ils doivent s'activer ou non en fonction de la requête reçue). Du coup je ne comprends pas vraiment…
Si je contacte le serveur directement via telnet, je constate que je reste connecté mais que je ne reçois jamais de réponse !
1 2 3 4 5 6 7 | > netcat localhost 3000 GET / HTTP/1.1 Host: localhost <enter> <enter> ... <là je devrais recevoir une réponse mais je n'en obtiens jamais, tout en restant connecté; je suis obligé de Ctrl+C> |
En ajoutant me middleware timeout (connect-timeout), mes absences de réponse / pages blanches / serveur introuvable deviennent des erreurs de timeout. Le serveur met trop de temps à répondre, il se « bloque ». Mais pourquoi donc ?!
Les middlewares qui me bloquent mon serveur sont :
- bodyparser.json
- multer
- compression
- csurf
Pourquoi ? Qu'est-ce qui se passe ? Qu'ais-je oublié, ou qu'ais-je fait de faux ?
Mon code est ci-dessous.
Système: Windows 10
Version de node.js: 6.9.1 (la dernière version stable disponible pour windows x64 à ce jour)
Merci pour vos réponses.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | const express = require('express'), util = require('util'), app = express(), config = require('./config.json'); { const bodyParser = require('body-parser'), cookieParser = require('cookie-parser'), multer = require('multer'), session = require('./session'), csurf = require('csurf'), compression = require('compression'), timeout = require('connect-timeout'), passport = require('passport'), LocalStrategy = require('passport-local') .Strategy; app.use(timeout(3000)); app.use(cookieParser(config.cookieSecret)); app.use(bodyParser.urlencoded( { extended: true })); app.use(bodyParser.json); //.use(multer) app.use(session); //.use(csurf({ cookie: false })) //.use(compression) } app.all('*', function(req,res) { res.status(200).send(` $ {new Date()}<br /> query: $ {util.inspect(req.query)} <br /> Body: $ {util.inspect(req.body)} <br /> Headers: $ {util.inspect(req.headers)} <br /> Session: $ {util.inspect(req.session)} <br /> Params: $ {util.inspect(req.params)} <br /> `); }); { const errorhandler = require('errorhandler'); app .use(express.static(__dirname + config.static)) .use( (req,res)=>res.sendStatus(404) ) .use(errorhandler); } app.listen(config.port); console.log(`Server ready on port $ {config.port}`); |