わしのlog

プログラミングとかバイクとか。

KAWASAKI-KH90を譲り受けた話と修理した話

はじめに

去年3月あたりに友人よりKAWASAKIのKH90を譲り受けました。
70年代の車両ともなるともちろん純正部品も出てきません。
更に追い討ちをかけるように、不人気車種なのかネット上にも情報があまり無く。
消耗部品など他車種流用した箇所もある為、備忘録的に残しておこうと思います。
少しでも他のKH90オーナーさんの参考になることを祈って。

入手時の状態


みづらいですが全体的に錆びてます。
ダストシール割れ、ブレーキスカスカ、タイヤパンク、ホイール穴あき...etc
こんな状況でしたが、エンジンは生きているようで数回キックでかかりました。

タンク

外装はサビが全体的にあり、かなりヤレてるように見えます。
が、中はサビ一つ無くきれいでした。
よって、タンクはヤレをそのまま味として残すことにしました。

フロントフォーク

まず、ダストシールとフォークオイルシールの純正品が出るか調べてみました。
結果、廃盤で出てこないみたいでした(番号の変更もなし)
このままではどうにもならないので、ダストシールとオイルシールの内外径を測り
他社種で似たものを流用することとしました。

内径を測る

測った結果、内径約27mmで厚み約11mmでした。
ここから大体同じっぽい車種を探し、AR80のフォークオイルシールが適合しそうなことがわかりました。
AR80のオイルシールとダストシール(カバー)セットは某オークションにて出品されていた為、早速購入。
到着後、組み付けてみたのですがダストシールの径だけ合わない・・・。
仕方なく、ダストシールの方だけフォークブーツを使用しました。

フォークオイルについては規定量についての情報がどこにも載っておらず
どうしようも無いので他KH90オーナーの記事を参考にして
「フォークをストロークさせてスプリングが頭から出てくるあたり」を油面としました。
これにてフロントフォークのOHは終了。

ステムまわり

試走した際にガタつきがあった為、ステムベアリングの交換を行いました。
最近のバイクと違い、ボールレースだったのでこんな感じで純正部品が大量に届きました。

大量の純正部品
ボール一個ずつパッキングされてて地獄でした・・・。

ホイール

こちらは純正部品が出た為、特に問題なく修理できました。

サビサビホイール

と、思いきやフロントホイール側に錆による腐食を発見。
穴が大きく、チューブに刺さって穴が空きそうだった為、純正部品を探しました。
が、当たり前のように出ず。
仕方が無いので表記されているホイールサイズで検索をかけ、合うものを探しました。
サイズは18*1.60 36H で、CB400Fのホイールが合うみたいだったので注文。
ドキドキしながら組んでみましたが、どうやら適合したようです。
タイヤ周り修理はこれにて終了。

ブレーキ周り


まず、リアブレーキは謎のボルトにてチューブにそのまま蓋がされていました。
(リアブレーキ効かない状態だったと推測しますが、大丈夫なのか・・・?)
とりあえず合うタンクも無いので、デイトナのマスター用小型タンクを注文し、取り付け。
リアのブレーキホースも詰まりが心配だったので、長さを計測して、汎用品(500mm)を使用。

フロントブレーキマスター

フロントブレーキですが、マスターに異種のものが使用されていました。
このまま使おうかと思っていましたが、レバー折れがあった為、こちらも汎用品を購入して使用しました。
ちなみにピストン径1/2(12.7mm)を使用しました。
マスターだけ無駄にピカピカ
KH90は
マスター => ホース => ブレーキスイッチ => ホース => ブレーキ
のような構造になっている為
ブレーキホースを2つ入手する必要がありました。
それぞれ450mm, 350mmのラバーホースを注文し、取り付け。
ブレーキパッドの方はまだ使えそうだったのでそのまま取り付けました。

(新品出るっぽいけど結構高かった)

テールランプ

テールランプは前オーナーが一度コカして割れたみたいです。
プラリペア」という商品を使って欠けを修理してみたんですが、あまり綺麗に直らない・・・。

なんとか補修しようと試みるが…

もう諦めてそのまま乗るつもりでした。
が、諦めずに検索をかけたところ、純正部品で出るようだったので購入。
(ありがとうモ○タロウ)
新品のテールランプ
ただし、テールランプの取付クッションとなるゴム部品は純正部品が出ませんでした。
ここだけなぜ・・・w
また、取付用の特殊な長いプラスねじも出ませんでした。
なので片側止め。

サイドカバー

サイドカバーについては相応のヤレがありましたが、これはこのまま味として残すことにしました。
ただ、取付の受け側のグロメット(ゴムのガタツキ防止部品)がボロボロだったので、新品に交換。
ここも純正部品が出るようです。

配線関係

前オーナーの時にいじったのか、ギボシ端子まみれでした。
また、収まりが悪くあちらこちらから配線が出ていたり、ショートしてそうな箇所があったので
一度バラシて綺麗に収まるように加工しました。
サービスマニュアルがどこを探しても出てこないので、配線図を乗せてくれているサイトを探しだし
拡大して見ながら、マーキングしてなんとかやり遂げました(画像の解像度が低くて本当に苦労した)

やらないよりはマシ程度のマーキング

完成

他にも整備したところはあるんですが、画像取り忘れ等で割愛します。
こんな感じになりました。
この状態で香川でツーリングしてきましたが、特に問題なさそうです。
山道もグングン登って調子よさげです。 乗った感じとしてはリアサスのふわふわ具合が少し気になります。
径や長さを図って、合いそうなものを見つけ次第入れ替えようと思っています。

終わりに

プチリフレッシュしていく中で思いましたが、日本車は本当に部品出ないですね。
(人気車種除く)
アメ車なんて今でもOEMモノが出てくるのに・・・。
と、いうのも4輪の話なので2輪は同じようなものなのかもしれませんが。
なにはともあれ、汎用品など駆使してなんとか走れるようにはなったので
これからも大切に乗っていきたいと思います。
貴重な2スト、エンジンがいつまでもつか不安ですが・・・。

近況など

気づけばもう夏も終盤。 すっかり日が暮れるのが早くなってきました。 皆様いかがお過ごしでしょうか。 私の方というと、ブログを更新するのをサボっている間に大きなライフイベントを2つも迎えました。

家を建てました

今年8月に家を建てました。 思い返せば建設会社決定〜土地探し〜建築に至るまで、おおよそ1年と7ヶ月の刻を要しました。
詳細についてはプライバシー保護の観点から伏せますが
建築にあたり重要視したことなど、ぼちぼち記事として書けたらなと思います。
(メモはたくさん残っている)

お気に入りのダイニングライト

娘が産まれました

9月某日、我が家に第1子となる娘が誕生しました。
母子ともに健康です。

子の写真を撮るため、デジイチを引っ張り出してきた
初めての出産で予定日を11日(!)も過ぎて、父親としてとても不安でしたが
助産師さんも驚くほどの超スピード安産で産まれ、元気な泣き声を聞かせてくれました。
産まれてきてくれて本当にありがとう。

仕事は主にリモートワークなので育児にも積極的に参加している...つもりです。
授乳以外のできることはやれるようにしています。
育児の中で今一番オロオロするのは沐浴。首座ってないのが怖すぎ。
正直、💩には耐性がついて少々手につこうが特に気になりません。
我が子ってスゴい。
現状、お腹が空いた、オムツが気持ち悪い以外のことであまり泣かないので
諸先輩方から聞いた「夜泣きで睡眠が〜」「泣き声でノイローゼに・・・」というのは発生してません。
周りの方からは「これからが本番だ・・・!」と常々釘を刺されてますが。
ともあれ、これからも我が子の為により一層頑張っていく所存です。

その他

Twitterではぼちぼちつぶやいていますが、ひょんなことからzrx400のエンジンを入手しました。
1から組もうと思って部品を揃えていってます。
が、肝心のタンクが高すぎて手が出ない状況。
穴が空いてるのは溶接の技術が無いので却下、多少の凹みであればパテでどうにかしようと目を光らせてますが
凹んでるにしては平均相場が高い様子。
たまに相場より安く落ちてる場合があるので、それを狙ってはや3ヶ月といった具合です。
フレームはもうあるのに。

個人開発の方は全く進んでおりません!w
ぼちぼちReact触りつつ進めてますが、業務でのメインはVue.jsを使ってるのでテンプレート構文とJSXの狭間で開発してます。
どっちもできた方がいいんでしょうけど、どちらかをメインにしたいです。
アウトプットできてないのが自分のスキルを停滞させている気がする。

終わりに

近況報告でした。
これから忙しくなると思いますが
合間をぬってブログ更新も続けたいと思います。
では。

97y サバーバンを購入して半年が経ったので感想等

はじめに

ブログサボるのがもはやお家芸のだいきちです。
5月の末あたりに97y GMC サバーバンを個人売買にて購入し、約半年が経過したので感想等書いていきたいと思います。
まず、購入当初のツイートがこちら(96yと書いてますが正しくは97yです。後でVIN見て気付きました)

現車確認

写真だけで買うわけにもいかないので、現車確認に行きました。
エンジンはセル一発でかかる状況、年式相応に足回りや外装はやれているものの、特に不具合もなさそうでした。
前オーナーさんによる気になる点は以下

  • エアコンが効かない
  • 下回りのサビが多い
  • ホイールはくすんでいる
  • 走行距離は17万km弱
  • 外装ヤレ(タッチペンで補修した跡やぶつけたらしき跡)がある
  • マフラーの先に単管パイプが溶接されている(おそらく前前オーナーの車検対策)

まぁ想定の範囲内(値段が値段なので)でした。
オークションでの購入だった為、所定の手続きを踏んで落札。
後日引き取りに行きました。
一時抹消状態だった為、友人の積車に載せて運ぶ作戦でいきました。
近県で助かった・・・。
以下、現車確認時の画像です。 f:id:devdaikichi:20201106145105j:plain
f:id:devdaikichi:20201106145207j:plain
f:id:devdaikichi:20201106145207j:plain
f:id:devdaikichi:20201106145333j:plain f:id:devdaikichi:20201106145359j:plain f:id:devdaikichi:20201106145424j:plain

足回り修理

とりあえず買ったままの状態ではどこに不具合があるかわからないので、一旦点検から入りました。
まず変えないといけない箇所は、足回りでした。
特にフロント左のアッパーアームについているボールジョイント、これがガッタガタでした。
また、リアデフからも少々のオイル漏れ。ガスケットと共にデフオイルも交換ですね。
これだけガタが来てると他の箇所も不安なので、アイドラアームなども交換。
また、敷地内試運転した感じハンドルのセンターが出ていない(右に切った状態でまっすぐ走る)ようだったので
タイロッドエンドの調整も行う為に、新品注文。
意外と変えるとこ多いなと思いつつも、全て注文しました。
足回りで変えたものは結局以下のように。

  • 左右上下ボールジョイント - ¥19151
  • ギアオイル * 2 - ¥6006
  • デフカバーガスケット - ¥1628
  • ピットマン アイドラ アーム タイロッド エンドフルセット - ¥54054
  • スタビエンドリンク - ¥3003

結構高い・・・。
とはいえ足回りがダメになると走行に支障が出るのでやむをえず。
また、こういった作業を進めるにあたって、車体がデカイので工具が必要になりました。
購入した工具が以下。 * ガレージジャッキ3.5t - ¥12570 * ウマ * 4基 - ¥3800 * ボールジョイントプーラー(SST) - ¥10980
この時点ですでに¥111192・・・。
とはいえ、後には引けないので気合入れて修理。

f:id:devdaikichi:20201106151255j:plain
新品のボールジョイントを入れたところ

f:id:devdaikichi:20201106151507j:plain
ピットマンアームが外れたところ

こんな感じで作業を進めていき、足回りリフレッシュが完了。
文章で書くとあっさりしていますが、この工程だけで納車から三ヶ月ほど経過しています。
特にアイドラアーム、ピットマンアームがテーパーのような構造になっていて中々はずれず
炙ったりどついたりでかなり体力を使いました。
二度とやりたくない作業best3に入りますね・・・。

消耗部品交換

次に消耗部品の交換を行いました。
プラグの火の飛びが怪しく、見てみたところ変えたことがないのでは?というレベルで錆びていました。
エアクリのフィルター、エンジンオイルなどは勿論変えるとして、冷却水も怪しかったので一応変えることに。
ナンバー灯は一つに割れがあり、バッテリーは上がっていたのでどちらも購入。
そして始動後に冷却水のコネクタに割れがあることが発覚。漏れても困るのでここも購入。
購入した消耗部品が以下。

  • NGKプラチナプラグ * 8 - ¥5456
  • エアフィルター - ¥4488
  • オイルフィルターセット - ¥3674
  • エンジンオイルドレンプラグ - ¥1089
  • クーラント - ¥3003
  • ACデルコ バッテリー 78-7MF - ¥16555
  • ナンバー灯ハウジング - ¥2376
  • オイルフィルターレンチ - ¥627
  • エンジンオイル * 6(予備含) - ¥8646
  • ヒーターホースコネクタ - ¥2189

バッテリーが高い・・・。
とはいえ、このあたりを交換すると始動や吹け上がりがよくなった感じがしました。
中古車買った際はこのあたりは総交換でよさそうですね。

エアコン修理

これが苦戦した・・・というか、一番お金がかかった。
まず、エアコンの現状確認すると、ガスが抜けてしまっているのと、エアコンのコントロールパネル(フロント)が壊れていそうだった。
よって、エアコンのコントロールパネルとガス、その他ガスが漏れている箇所の部品を購入した。

  • A/C コントロール パネル - ¥39831
  • ヒーターホースジョイント - ¥1837
  • ヒーターコントロールバルブ - ¥4004
  • A/C リアエキスパンションバルブキット - ¥9185
  • ヒーターホースジョイント(T) - ¥1298
  • A/C プレッシャー スイッチ COMP - ¥6105
  • A/C プレッシャー スイッチ(低圧側) - ¥3003
  • A/C プレッシャー スイッチ(高圧側) - ¥4004
  • A/C オリフィスチューブ - ¥1496
  • A/Cアキュムレーター - ¥6886
  • A/C チャージ バルブ キャップ コア セット - ¥2002
  • A/C Oリング シール キット - ¥2299
  • R134a PAGオイル蛍光剤入りガス缶 - ¥1978
  • クーラーガス * 15(予備含) - ¥7244

コントロールパネルが異様に高い・・・。
そして部品数が異常。
財布が空になるかと思いましたが、どうにかこれで直った・・・。
かに見えたんですが、どうやら直り切っていない模様。
フロントのエアコンの効きが悪く、風量も少ないし、外気/内気の切り替えがうまくいってなさげです。
とりあえず漏れはなくなりましたが別の問題ですね、おそらくエアコンのコア部分のフラップか、アクチュエータがおかしいんだと思います。
が、今回はとりあえず乗れるまでになればいいのでこのあたりで途中やめに。
あとは来年に持ち回しかな・・・。
以下、作業途中の写真です。

f:id:devdaikichi:20201106160328j:plain
ガスこれだけ入ります。多い。

不安部品の購入とフューエルポンプからの異音

いよいよ車検!といきたいところですが、ここまで整備していて気付きませんでしたが
なにやらフューエルポンプから異音が・・・。
「ミーーーー」というような音が出ているので、不安になり部品を購入して交換することに。
また、その他不安部品としてオルタネータの不具合がよく出る車両とのことで、オルタネータも購入。

  • オルタネータ - ¥22528
  • フューエル ポンプ モジュール ASSY - ¥21010

早速燃料タンクをおろしてみると
f:id:devdaikichi:20201106162344j:plain
んー、汚い・・・。
そして燃料ポンプの細いパイプの方がサビで折れた・・・。
交換しておいてよかったです。
逆順で組み付けて始動、異音がないことが確認できました。

いよいよ車検

車検に落ちそうなところが無いか点検、整備後、仮ナンバーを取得していざ車検場へ!
機能関係、灯火類などは問題なく通過しました。
・・・が、エンジンの原動機型式の打刻が見つからず、1回目の車検はタイムオーバー。
車検場の検査員も見つけることができず、自身でも探ってみましたが結局見つからず・・・。
ユーザ車検は諦めて、最寄りのアメ車屋さんにもっていくことになりました。
結果からいうと、アメ車屋さんも見つけることができず、打刻のし直し、という対応になりました。
そんなことあるのか・・・と思いましたが、サビで消し飛んだりした場合など稀にあるケースみたいです。
餅は餅屋、ということでここに関してはアメ車屋さんに頼んでよかったと思います。
ありがとう、アメ車屋さん。

車検完了

f:id:devdaikichi:20201106163839p:plain
洗車中の写真

晴れて車検を取得することができ、公道走行ができるようになりました。
ここまで長かったんですが、運転してみるとそんなことは吹っ飛びますね。
V8エンジンは最高です。
これからも不具合や故障と付き合っていくことになるとは思いますが、ぼちぼち維持していこうかと思います。

車検後レビュー

車検とれて終わり!というわけではなく、やはり20年超も前の車となると色々なところにガタがきてますね〜。
以下、車検後の簡単な不具合一覧です。

  • ラジエータのヒーターインレットというところのプラグ(ゴム栓)がとれて冷却水が漏れた(あわや大惨事)
  • ベルトが少し鳴いてる気がする。プーリーなど交換すべきかも
  • オーディオが壊れてる。(カロッツェのナビを予約したので、そちらで・・・。)
  • 下回りのサビは塗ってあげないとどんどん進行しそう
  • 右ウィンカーがハイフラになっている。接触なのか抵抗がおかしくなっているのか・・・
  • 鍵がささっている時の「ピー」という警告音のタイミングがおかしい。多分これも接触不良。
  • リアにスピーカーを組んでいるみたいだが音が出ていない
  • 謎のセキュリティ機器、謎のリアカメラ(どちらも機能していない)
  • ウォーターポンプの錆がひどい
  • リフトアップ車両故のハイビーム返しが辛い(自業自得)

結構ありますが、致命的なのは冷却水のあたりくらい?
とりあえず増し締めと、新品のキャップを買ったのでどうにかなりそうです。
エアコンは来年、ベルト周り・ウォーターポンプは今年中にはリフレッシュしたいですねぇ。
17万キロを超えた車なので、どこかのタイミングで腰上だけでもエンジンのオーバーホールが必要かも・・・?
オーバーホールするのは大金なので、とりあえずは騙し騙し乗ることにします。
オイル漏れなどは今のところないですしね。

終わりに

これからも手がかかりそうですが、大事に乗って行こうと思います。
リッター5kmは中々つらいですが、迫力と積載性はピカイチのいい車両だと思います。
乗ってみて気づいたんですが、意外と細い道もいけます。
同様なフルサイズ車両(タンドラなど)と比べると、意外とスマートなイメージ。
皆さんもサバーバン、いかがでしょうか。
注目の的になれますよ、車両代安いし・・・w
以上、半年のレビューでした。

現場からは以上です。

【メモ】Electron + React + Redux + react-routerでexactが効かない

環境

PC

package.json

  • connected-react-router : 6.8.0
  • eslint-loader : 4.0.2
  • react : 16.13.1
  • react-dom : 16.13.1
  • react-redux : 7.2.0
  • react-router-dom : 5.1.2
  • redux : 4.0.5
  • electron : 8.2.5

概要

以下、迷い込むまでの道のり

  • Electronでアプリ作ったろ
  • reactいれてみたろ
  • ならreduxいれたろ
  • react-routerいれたろ、redux使ってるからconnected-react-routerいれたろ
  • よっしゃ、いつも通りroutingの構文かくで〜
  • ページ真っ白やん・・・

結局、これだ!っていう解は見つかってないんですが、回避策は見つけました。
気づいたきっかけはコレ。
f:id:devdaikichi:20200511223029p:plain

(開発者ツールでURLを表示してみました)
そもそも、localhostなりにサーバ建ててる訳じゃ無いからそうなるわな・・・。
で、こうなってるともちろんrouterで
<Route exact path="/" component={Hoge} />とかやっても表示されない訳です。

解1: exactを使わない

render(
  <Provider store={store}>
    <ConnectedRouter history={history}>
      <Switch>
        <Route path="/fuga" component={fuga} />
        <Route path="/" component={hoge} />
      </Switch>
    </ConnectedRouter>
  </Provider>,
  document.getElementById("root")
);

こんな感じにするとうまい具合に動きます。
Routeで定義したものはもちろん上から評価されるので、exactを使わない場合はこう書くしかないですね
ちなみに今回、こちらのボイラープレートのソースを参考にしてましたが

github.com

exact使ってませんね、ハイ。
exact使わずに書いてるのは今回みたいな事象があるからなのかな?と思ってます。

解2

こんな方法もあるっぽいです。

medium.com

要するにHashRouterを使うことで、静的ページのRoutingを行えるようにしてるってことですね。
<ConnectedRouter><HashRouter>を囲むのがいい方法なのかどうかはわかってないので
今回はこの方法は見送りました。
ちなみにこの方法でいくと、URLはこんな感じになります。

f:id:devdaikichi:20200511224842p:plain

Electronでアドレスバーは出ないので、問題はないんですが
私はこのURL,あまり好きでは無いです・・・。

解3(?)

試してないんですが、これでいけるんじゃない?ってのを一つ。
Electronのアプリを作成するにあたって
起動オプション等を設定するファイル(レンダープロセスとかの)を作成すると思うんですが
そこでloadURL関数を使えばlocalhostを読めますよね
要はlocalhostでreactのWebサーバを建てておいて、そいつをElectronで読み込みにいけば
うまくexact効かせられるんじゃないかなーと思ってます。
でもこの方法使うと本末転倒な気が・・・?

終わりに

そもそもElectron + React + Redux + react-routerの組み合わせって一般的なのだろうか
画面遷移についてあまり深く考えたくないからreactやらreact-router使ってみたんですが
余計悩んでしまって、これまた本末転倒な感じになってしまいました。
とはいえ回避策っぽいものは見つかったので、このまま作ってみようと思っています。

現場からは以上です。

【メモ】ejsに文字列の配列を渡すとquotesが消失する

環境

  • Express 4.17.1
  • ejs 3.1.2

概要

こんな感じで渡すとquotesが消える(一部略)。

ソース

app.get('/hoge', function (req, res) {
    var hoge = ["path", "to", "hoge", "fuga"];
    res.render('hoge', { hoge });
})
<html>
  <head>
    <title>test</title>
  </head>
  <body>
    <div id="container"></div>
  </body>
  <script>
    document.getElementById("container").innerHTML= <%=hoge%>;
  </script>
</html>

実行結果

f:id:devdaikichi:20200428124518p:plain

最初ejsで変数を吐く時のタグの違い(<%= %><%- %>)かな?と思ってましたが
どうやら違うようで、どちらにしてもクォーテーションは取り除かれるみたいですね。
とりあえずJSON.stringifyを使用して乗り切ることにしました。

<html>
  <head>
    <title>test</title>
  </head>
  <body>
    <div id="container"></div>
  </body>
  <script>
-    document.getElementById("container").innerHTML = <%-hoge%>;
+    document.getElementById("container").innerHTML = <%-JSON.stringify(hoge)%>;
  </script>
</html>

とりあえずこれでscriptタグ内でも文字列の配列が使えるようになりました。

終わりに

事の発端はchart.jsのlabelにExpress側から配列を渡そうとしたことでした。
数値ならうまくいくのになんでだ?と思って開発者ツールを見ると上記エラーに。
ejsのエスケープ処理でquotesは取り除かれる運命なのだろうか

現場からは以上です。

【メモ】sqlite3のUPSERTを試してみた

環境

Windows 10 Pro 64bit
sqlite3
PowerShell 5.1.18362.752

概要

このたびSQLiteを触る機会があり、リファレンスを眺めているとupsertがあったので試してみた。
調べたところ、二種類あるみたいで
ON CONFLICT
を使って条件分岐させるものと
REPLACE INTO
を使って置換させるものの二種類があることがわかった。

試してみたコマンド等

とりあえず適当にテーブルを作って初期データのINSERT。

C:\hoge> sqlite3 hoge
sqlite> create table user(id integer, name text, description text, primary key(id, name));
sqlite> insert into user (1, 'hoge', 'fuga');

まずはREPLACE INTOから。

sqlite> replace into user values(2, 'hoge', 'fuga')
sqlite> select * from user;
1|hoge|fuga
2|hoge|fuga
sqlite> replace into user values(1, 'hoge', 'fugaaa')
sqlite> select * from user;
2|hoge|fuga
1|hoge|fugaaa

なるほど、delete insertなのか。
replaceっていうから、updateが流れてるのかと思ってた。

次はON CONFLICT

sqlite> insert into user values (2, 'hoge', 'hogefuga') on conflict(id, name) do update set description = 'fugafuga';
sqlite> select * from user;
2|hoge|fugafuga
1|hoge|fugaaa

こっちはまぁ予想通りというか、分岐してupdate文発行してるので
期待通りの結果になった感じ。

終わりに

場合によって二つを使い分ける感じかなと思いました。
すっきりかけるのは前者だけど、条件分けして色んなことをするなら後者かなぁ。

現場からは以上です。

【メモ】ExpressでPOSTした値を取得しようとするとundefinedになる

環境

Windows 10 64bit
Node.js v12.16.2
Express 4.17.1

現象

POSTした値がundefinedになる
こんな感じでいけるだろうと思ってドキュメント読まずに適当に書いたのが以下(一部略)。

'use strict'

const express = require("express");
const app = express();

app.post("/hoge", (req, res) => {
    console.log(req.body)
    console.log(req.body.fuga)
});

// 略

Expressの公式ドキュメント、req.bodyの項を参照するとわかる。
以下、引用

Contains key-value pairs of data submitted in the request body.
By default, it is undefined, and is populated when you use body-parsing middleware such as body-parser and multer.

body-parserを導入しておけば、ミドルウェアとしてよしなにやってくれるということっぽい。
あれほど公式ドキュメントをよm(ry
ちなみに文中で触れているmulterっていうやつはファイルアップロードなんかに使う
multipart/form-dataを処理するためのものっぽい。
とりあえず今はmultipart/form-dataを扱う気はないので、body-parserを使おう。
直したものが以下。

'use strict'

// requires
const express = require("express");
const bodyParser = require('body-parser');

// express settings
const app = express();
app.use(bodyParser.json())

app.post("/hoge", (req, res) => {
    console.log(req.body)
    console.log(req.body.fuga)
});

// 略

これでbodyの中身が取得できるようになりました。

終わりに

行き詰ったら公式ドキュメントを読め・・・というか最初から公式ドキュメントを読めって感じですね。
ただ、やりたいことが頭の中にあるとどうしても先に手を動かしたり、参考ソースを見ちゃうんですよね・・・
Getting Started当たりから実装して、関連してそうなタイトルを公式ドキュメントからチョイスしていく形に
シフトできればこういった問題も無くなりそうだなと思いました。

にしてもなんでmiddlewareに切り離したんだろう。
必要なものは自分でチョイスしてね。という意図があるんだろうか。

現場からは以上です。