90532


## やりたいこと

全てのエンドポイントであらかじめ`<body>`を表示しておきたい  
全てのエンドポイントで`res.send(<body>..)`を先に書いておけば済む話なのですが、どこかでまとめられるならまとめたい

## 試したこと

[code]

    const express = require("express");
    const app = express();
    
    app.listen(3000, console.log("サーバーが開始されました。"));
    
    // ミドルウェアを使用するような形で実装してみましたがhoge関数内のres.sendが実行された時点で処理が止まる
    // "/"にアクセスしてもffffgは表示されない
    app.use(hoge);
    function hoge(req, res, next) {
      res.send("<body>");
    }
    
    app.get("/", (req, res) => {
      res.send("ffffg");
    });
    
[/code]

## なぜこの実装をしたいのか

`browser-sync`でクライアントサイドのホットリロードを実装したいのですが、  
`body`要素をレンダリングしないと動かないのが理由です。


CC BY-SA 4.0
2022-08-12T07:36:40.737
90524
2022-08-12T23:31:07.250
2022-08-12T23:31:07.250
3054
51745
question
javascript node.js express.js
Expressの全てのRoutingにおいて先に文字を表示したい


Response の `send` メソッドに細工をしておく方法です。

[code]

    app.use(hoge)
    function hoge(_req, res, next) {
        res.origSend = res.send
        res.send = function (body) {
            this.origSend("追加文字列\n" + body)
        }
    
        next()
    }
    
[/code]

他に `write` などのメソッドを使っているならば、それらにも細工が必要になります。あまり綺麗な方法ではないでしょう。

* * *

開発中のみの処置とはいえ、HTML の先頭に `<body>`
を追加すると、HTMLの構造を大きく損ない、テストが失敗するなどの問題が生じかねません。Browsersync の
[snippetOptions](https://browsersync.io/docs/options/#option-snippetOptions)
などで対処できるならば、その方がよいと思います。


CC BY-SA 4.0
2022-08-12T23:29:12.243
90532
2022-08-12T23:29:12.243
3054
90524
answer