🔥

Node.js

に公開

Node.jsとは

Node.jsとは、Javasriptをサーバ上で実行できるようするものである。
基本的にJavasriptはブラウザ上で実行されるが、Node.jsを使用するとサーバ上でも使用できるようになる。

Webブラウザ上でのJSと、node.js上でのJSの機能の違い

Webブラウザ上では、
ECMAScript
document(DOM API)、alertなど使える
ES Module
グローバルオブジェクトはwindow

node.jsでは
ECMAScript
CommonJSを使う
ES Module
グローバルオブジェクトはglobal

Vscodeでnpmコマンドのエラーが出る場合

PowerShellを管理者として実行

Set-ExecutionPolicy RemoteSigned

Y入力

Vscode再起動

CommonJSとES Moduleの違いとメリットデメリット

https://chatgpt.com/share/67efd5a1-ee60-800e-b46d-ddefacd82a6f

CommonJSをブラウザ上で使えるようにするには

CommonJSをブラウザ上で使えない。(ES Moduleは使える)
使えるようにするには、WebpackやBrowserifyを使ってバンドルするのが必要
https://chatgpt.com/share/67f12ca7-cfdc-800e-bc2a-da9c3c0e5c05
なお、バンドル化のメリットはそれ以外もメリットがある。
https://chatgpt.com/share/67f12e7d-dfc4-800e-be2e-4954df87becc

webpack.config.js

webpack.config.jsはwebpackの設定を記述するファイルである。
これを記述することで、
バンドル化やトランスパイルやminifyなどの設定を行える。
設定項目の説明は以下を参照する。
https://chatgpt.com/share/67f130ef-961c-800e-82df-9cf460dc29aa

Volta

https://chatgpt.com/share/67eea19d-2910-800e-93d6-8a76109615a7

package.jsonとpackage-lock.json

Node.js プロジェクトの「設定ファイル」のようなもので、そのプロジェクトに関する情報や、必要なパッケージ(ライブラリ)、スクリプトなどを定義するために使われます。Node.js のプロジェクトにはほぼ必ずこのファイルが含まれています。
https://chatgpt.com/share/67eff337-1f48-800e-885a-86aefba0aee7
https://chatgpt.com/share/67f07d5d-ce4c-800e-8070-bba72c2d871c
https://chatgpt.com/share/67f08158-4c54-800e-a389-d02643118818
https://chatgpt.com/share/67f08942-9968-800e-b765-ea18253192b9

npmコマンド

npmとは

npmとは、Node.js のパッケージマネージャーのことで、正式には Node Package Manager と呼ばれます。JavaScript のライブラリやツールを簡単に管理・インストールできる便利なツールです。
package.jsonに記載されているdependenciesまたはdevDependenciesからnpm installコマンドでインストールしてきます。
https://chatgpt.com/share/67efebab-9ce0-800e-a1ac-5e6034776f4d

よく使うnpmコマンド

https://chatgpt.com/share/67f07f9c-5670-800e-9601-34386299ac1e

様々なnpm run

https://chatgpt.com/share/67f07f9c-5670-800e-9601-34386299ac1e
以下のことが可能。

スクリプトに引数を渡す

複数コマンドの連続実行

並列実行(同時実行)

スクリプトの中で別のスクリプトを呼ぶ

動的なスクリプト実行(環境ごとに変える)

npm-run-all で一括制御

スクリプト内での変数展開

インタラクティブな CLI と組み合わせる

スクリプトで使えるシェルコマンド

ローカルパッケージとグローバルパッケージの違い

https://chatgpt.com/share/67f08ef9-1218-800e-a006-e69858c51477

グローバルパッケージのインストール先

npm root -g

ダウンロードしてきたパッケージのサイトを開く

npm docs package.jsonのname

ダウンロードしてきたパッケージのダウンロードサイトを開く

npm repo package.jsonのname

npm linkで他のパッケージから処理を呼び出す

この場合は、npm linkを使用する。
https://chatgpt.com/share/67f0925c-de0c-800e-9a57-0712fe7029c1
ただ、注意点としてnpm install で他のパッケージをインストールすると npm link が切れる場合がある。
なので、利用するpackage.jsonで以下の記述するとこの事象は起きない。
"dependencies": {
"lib-prj": "file:../lib-prj"
}

パッケージ読み込ませる

import _ from パッケージ名
パッケージ名を指定すると、node_modulesの中のパッケージ名と同じフォルダ名を読み込む。

例えば
import _ from 'lodash';
だと
以下のloadshが読み込まれる

nodemonでソースコードの変更を監視して、自動的にアプリケーションを再起動する

通常、Node.js アプリを変更した後は、自分で手動で再起動(ctrl + c → node app.js など)しなければなりませんが、nodemon を使えばそれが不要になります。
https://chatgpt.com/share/67f15b1d-3608-800e-aa07-7bb7212e87e0

E2Eテストやスクレイピングを行えるPlaywrite

Playwriteは、WebブラウザのE2Eテストにもスクレイピングなどを行えるツールである。

基本的な使い方

https://chatgpt.com/share/67f0e317-9750-800e-90e6-d82133a4f3b7

Webサイトの情報をcsvファイルに書き込む

https://chatgpt.com/share/67f0e3b5-fa00-800e-9e6c-3d731acc5fe1

Googleスプレッドシートから値を取得・書き込み

https://chatgpt.com/share/67f0f535-6c40-800e-ba8a-2611cf0bd266
https://chatgpt.com/share/67f10ae8-4f28-800e-93a3-cb7ef449f2c6

cronで処理を定期実行する

https://chatgpt.com/share/67f10d05-428c-800e-8886-c4373e6bd20c

.envファイルから値を読み込む

https://chatgpt.com/share/67f0f640-9370-800e-b788-d45c2885a814

nodemailerでメール送信を行う

https://chatgpt.com/share/67f10fa8-c40c-800e-b15c-9882146fac81

API周り

URLごとに処理を分ける

https://chatgpt.com/share/67f15cbb-205c-800e-b9fc-591f5f7b9dcd
以下の三つがある。

素のhttpモジュールを使う

Expressを使う(実用的で簡単)

ルーティングを分ける(Express + モジュール分割)

Routerでルーティングを見やすくする

https://chatgpt.com/share/67f2074b-70ec-800e-9d29-38aa0da9349d

ステータスコードやヘッダー情報を設定する

https://chatgpt.com/share/67f16422-7540-800e-8cdc-0be34a759c08

HTTPメソッドの取得方法とGETとPOSTのデータ取得方法

https://chatgpt.com/share/67f1e56e-828c-800e-8e01-e5c479a09408
なお、もし頻繁にPOSTでJSONを扱うならExpressの方が簡単に書ける

フォームのデータをJSON形式で送り、サーバ側でそれを取得する

https://chatgpt.com/share/67f1f5c1-84fc-800e-8647-2341035544cb

ミドルウェアとルートハンドラ

リクエスト
   ↓
[ミドルウェア①][ミドルウェア②][ルートハンドラ]
   ↓                   ↓                 ↓
ログ記録       認証チェック       DBからデータ取得&レスポンス

ミドルウェア

リクエスト(req)とレスポンス(res)の処理の途中に挟まる関数。
認証、ログ記録、リクエストの加工、レスポンスの前処理などに使う。

const logger = (req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next(); // 次に進む
};

app.use(logger); // 全リクエストにこのミドルウェアが適用される

基本的な事項
https://chatgpt.com/share/67f21acb-7944-800e-bb48-3860cef53599
return next()する理由
https://chatgpt.com/share/67f21d33-b5ec-800e-9c7c-337b49800f38
エラーハンドリング
https://chatgpt.com/share/67f21e12-cce0-800e-8a18-609ee255dd77
なお、ミドルウェアはurlは前方一致である。
https://chatgpt.com/share/67f21c4b-6dc0-800e-8367-746645c3d8fa

ルートハンドラ

特定のURL(エンドポイント)とHTTPメソッドに対して最終的な処理をする関数。
データベースから情報を取得したり、レスポンスを返したりするのが主な役割。

app.post('/login', (req, res) => {
  const { username, password } = req.body;
  // ログイン処理
  res.send('ログイン成功');
});

様々なミドルウェア(Express)

https://chatgpt.com/share/67f26e18-2b78-800e-ac1f-03cd415f710f

Expressのリクエストバリデーション

https://chatgpt.com/share/67f26d96-d654-800e-8ced-ce2e2d4f8316

MongoDBのCRUD処理

検索

https://chatgpt.com/share/67f25abd-91f0-800e-84f2-62a1d20f8e4a

登録

https://chatgpt.com/share/67f25b65-6b40-800e-a620-338d31678876

削除

https://chatgpt.com/share/67f25b98-6c24-800e-89aa-c53016289c76

更新

https://chatgpt.com/share/67f25bc7-7a9c-800e-bc91-6cb4101e38f6

Discussion