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