前回の続きになります。
今回は、Node.js + Expressを使い、Hello Worldを行います。
npmとは
npm = Node Packge Managerの略。
- JavaScriptのパッケージマネージャー
- JSモジュールをいろんな人が再利用できるようにするエコシステム
- モジュール情報や依存関係等のプロジェクトに関する基本情報をpackage.jsonに保持する
npmの使い方
プロジェクトの初期化(=package.jsonの作成)
npm init
※ --globalオプションでグローバル(プロジェクトをまたがった)インストールが可能
パッケージのインストール
■ 例 : utf-8以外のファイルを読み書きするパッケージをインストール
※ パッケージの種類はhttps://www.npmjs.com/を参照
npm install iconv-lite --save
インストールしたモジュールの確認
npm ls
モジュールの利用
// httpモジュールの用意
var http = require('http');
のように、モジュールはrequireで読み込む。
※ 一度requireされたものはキャッシュに残るため、複数ファイルにまたがるようなrequireについて無限ループすることはない。
モジュールの作成
- jsファイルに記述
- module.exportsへモジュール化したいものを出力
■ 例1 : 出力値が関数の場合
module.exports = function () {
console.log("Hello World");
};
// 関数の場合
(function () {
var module = require("./module1.js");
module();
})();
■ 例2 : 出力値が文字列の場合
module.exports = "こんにちは"
// 文字列の場合
(function () {
var module = require("./module2.js");
console.log(module);
})();
■ 例3 : 出力値クラスの場合
var PolarBear = function (height, weight) {
this.height = height;
this.weight = weight;
};
PolarBear.prototype.power = function () {
return this.height * this.weight;
};
module.exports = PolarBear;
// クラスの場合
(function () {
var PolarBear = require("./module3.js");
var obj = new PolarBear(200, 450);
console.log(obj.power());
})();
Expressとは
- Webアプリケーション開発のフレームワーク
- Node.jsで作成するサーバーサイドWebアプリケーションのデファクトスタンダード
- Express自体は最低限の機能だけ提供しており、必要なミドルェアを組み込んで拡張子する必要がある
単独でできること/できないこと
- ○ : ルーディング
- ○ : レスポンスの整形
- × : クエリパラメータ分析
- × : クッキー分析
- × : セッション管理
- × : 認証許可
- × : DB接続
ミドルウェアの例
リクエスト分析 : cookie-parser, bode-parser
セッション管理 : expresss-session
認証 : passport
Hello World
1, プロジェクトの初期化
npm install
以下のようなpackage.jsonの設定を行う。
※ エントリポイントをapp.jsと置いている。
{
"name": "sample",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "kamihork",
"license": "ISC",
"dependencies": {
"express": "^4.16.3",
"iconv-lite": "^0.4.23"
}
}
2, expressのインストール
npm install express --save
※package-lock.jsonが自動生成される。
3, app.js
expressはcoreモジュールに対し拡張を行なっている。
httpモジュールに対しても拡張を行なっており、例えばgetメソッドのみに対してのみ処理を行いた時は、以下のように記述することができる。
// moduleをrequire
var express = require("express");
var app = express();
// getパラメータに対する処理を記述
app.get("/", (request, response) => {
// response.writeHead(200);
// response.write('hello world');
// res.end();
// -> expressでの場合、こう書くこともできる
response.status(200).send("Hello World");
});
// ポート指定で接続
app.listen(3000);
以上、http://localhost:3000/にアクセスすればHello Worldできる。