動かざることバグの如し

近づきたいよ 君の理想に

Expressでよく使われてるreq, resの中身はなにか

環境

  • Nodejs 10
  • Express 4.x

結論

で、nodejsの標準のオブジェクトで別にExpress特有のものではなさそう

経緯

よく見かけるNodejsのHTTPフレームワークことExpressのHello Worldのサンプル

const express = require('express')
const app = express()

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(3000, () => console.log('Example app listening on port 3000!'))

Expressではreq, resが必ずと言っていいほど入っているが、その実体は何?って話になった。

console.log(req.constructor.name);
console.log(res.constructor.name);

で調べてみると、

IncomingMessage
ServerResponse

とでた。Expressのドキュメント探しても見当たらないなーとか思ってたら、どうやらNodejs標準のオブジェクトだったらしい

確かに https://nodejs.org/docs/latest-v10.x/api/http.html#http_message_httpversion を見て

console.log(req.httpVersion)

とかすると 1.1 と表示される

ソース

ちなみにExpress 4.xの公式ドキュメントにて

The req object is an enhanced version of Node’s own request object and supports all built-in fields and methods.

と実は書いてあったりする。いや小さすぎてわからんわ。。。

参考リンク