IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Modifier le response.body à la volée dans un middleware connect/express


Sujet :

NodeJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut Modifier le response.body à la volée dans un middleware connect/express
    Bonjour,

    Je bute depuis le début d'après-midi sur un problème qui semble tout bête et pourtant impossible à résoudre.

    J'ai un serveur connect 3.0.3 qui dessert des fichiers statiques, et je souhaite opérer une modification à la volée du contenu de la réponse de fichiers JS, HTML et HBS (handlebars)

    Il semble qu'avec les évolutions de Node, accéder au response.body de simples fichiers textes sous forme de String soit devenu de plus en plus compliqué, à cause des buffers et du traitement asynchrone. J'ai testé tout un tas de libs, dont la dernière est celle-ci : https://github.com/rubenv/connect-body-rewrite ; sans parvenir à faire fonctionner le remplacement.

    Voici ma conf de middleware:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function devMiddlewares(connect, options) { 
      return [
          require('connect-modrewrite')([
             '^/test/img /img/'
          ]),
          /* DOES NOT WORK... :( */
          function(req, res, next){
             console.log(req.url);
             var extension = path.extname(req.url);
             var regexByExtension = {
                ".hbs": /\{\{\s*tr\s+['"](.*?)['"]\}\}/g,
                ".html": /\btr\(['"](.+?)['"]\)/g,
                ".js": /\btr\((['"].+?['"])\)/g
             };
             return require('connect-body-rewrite')({
                accept: function (res) {
                   return extension in regexByExtension;
                },
                rewrite: function (body) {
                   console.log(req.url, extension, body.match(regexByExtension[extension]));
                   return body.replace(regexByExtension[extension], function(match, label){ return label; });
                }
             }).apply(this, arguments);
          },
          require('connect-livereload')({port: grunt.config('settings.liveReloadPort')}),
          connect().use(server)
       ];
    }
    J'arrive à logger jusqu'à la fonction rewrite, mais dès que j'essaie de faire un replace j'ai l'impression que le middleware plante silencieusement et mes pages sont servies sans aucun changement.

    Cette lib ne semble pas maintenue donc j'aimerais autant m'en passer et trouver une solution plus simple qui fonctionne.

    Bref, comment accéder à res.body et modifier la réponse à la volée ? Sur d'autres serveurs c'est pourtant un jeu d'enfant.

    Merci d'avance à tous ceux qui pourront ou essaieront de m'aider

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Je viens de trouver et je n'en suis pas fier... c'était mon cache navigateur

    Il semble que Chrome ait un cache pour les favicon et les balises <title> différent de celui utilisé pour le reste de la page. Je me servais de la balise <title> pour vérifier le fonctionnement de ce remplacement, mais ce titre n'était jamais mis à jour au refresh. En ouvrant une fenetre de navigation privée, tout fonctionnait bien.

    Désolé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Modifier la Response dans un controller avec un event
    Par DanaKil dans le forum Symfony
    Réponses: 8
    Dernier message: 04/05/2012, 09h19
  2. Comment modifier la taille de la police dans Word ?
    Par djoao dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 11/12/2004, 12h49
  3. [VBA-E]modifier les attributs d'un commentaire dans une cellule
    Par Olivier vb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/03/2004, 10h26
  4. modifier l'adresse d'un dll dans un .exe
    Par Mr Meuble dans le forum Windows
    Réponses: 4
    Dernier message: 02/03/2004, 16h39
  5. [EXCEL]Modifier les marges d'une page dans Excel
    Par ms91fr dans le forum Composants VCL
    Réponses: 4
    Dernier message: 06/01/2004, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo