27
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

node.js、express、handlebarsを使ってウェブサーバーの立ち上げからページの制作までをやってみた - 1

Last updated at Posted at 2021-06-13

で、具体的にnodeを使ってどうやってウェブサイトを作るんじゃい?

拙者、[前回nodeとは何なのか?](https://qiita.com/monsoonTropicalBird/items/f12848cc5d0cde726d4f)を解説し申しましたが、nodeをコンピューターに入れただけだと、基本的にはコマンドラインからファイル操作などをjavascriptで行うっていう作業しか出来ないんだけど、サーバーを立ち上げてページを作って所定のディレクトリにいれ、ブラウザから見れるようにするという作業には、フレームワークを使います。
幾つか選択肢があるんだけど、今回は一番ポピュラーで軽いexpressというフレームワークを使って、サイトを構築。
イメージとしては、nodeにてウェブやウェブアプリの制作に必要なモジュールが用意されているパッケージっていう感じ。
以下順を追って、サーバーの構築方法。

1、メインディレクトリの制作とモジュール類のインストール

まずはウェブサイト全体を収めるメインのフォルダ(ルーツになる)を適当なところに作って、cdコマンドでそのフォルダに移動し、下記コマンドを実行。init、つまり初期化! *今回は"NodeSite"っていうフォルダを制作したみたよ。

~/NodeSite$ npm init
幾つか質問が出てきますが、とりあえず全部そのままでOK。
そうすると、package.jsonというファイルが自動生成されます。

  "name": "nodesite",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "nanashi",
  "license": "ISC"
}

で、次にExpressをインストール。下記コマンドを実行。
**npm**ってのは、Node Package Manager。つまり、色んなモジュールやパッケージをインストールしたり、設定したりしてくれるよ。

~/NodeSite$ npm install express --save

**package-lock.json**ファイルとnode_modulesフォルダが生成されます。dependenciesっていうのは、読み込んだ外部モジュールのこと。この一覧がpackage-lock.jsonファイルに記録されていきます。
このjsonファイルがあれば、モジュール自体が無くても、npm install コマンド一発で、自動的にインストールしてくれます。持ち運びに便利!
node_modulesはそのままで、読み込んだモジュールのデータ。便利機能の保存場所。ここがドラえもんたる所以ですね。

2、app.jsファイルを作って、サーバー側 javascriptを書く

インストールが済んだら、app.jsファイルを作って、そこにサーバーサイドのjavascriptを書いていきます。

制作したルーツフォルダ直下にsrcフォルダを作り、その中にapp.jsファイルを作りましょう。コードは以下


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

// routing
// app.com/ => root
// app.com/about => about page

app.get('/', (req, res)=>{
res.send('Hello Express!');
})

app.get('/about', (req, res)=>{
    res.send('This is about page');
})

app.listen(3333, ()=>{
    console.log("server running on Port:3333");
})

これが超基本のコード。

これだけでサーバーがセットアップされ、ホームページとaboutが表示されます。

####コード解説


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

1行目:外部モジュールを呼び込むお決まりの呪文。require('モジュール名')

2行目:expressはこの時点で関数なので、実行して、オブジェクトやメソッドを使えるようにし、app変数に入れる。


app.get('/', (req, res)=>{
res.send('Hello Express!');
})

app.get('/about', (req, res)=>{
    res.send('This is about page');
})

ルーティングと言われている部分。
app.get()メソッドを使うと、各URLにリクエストを振り分けられる。
幾つでもここでルーティングできます。

引数は2つ。リンク先アドレスとコールバック。で、コールバックは2つの引数reqresをとる。これは決まってる。

req resについての詳細は長くなるので、調べてちょー。

簡単に言うと、getリクエストで指定したリンク先にアクセスがあった場合、コールバックの内容が返される。

今回のサンプルは単純にテキストを返してるだけですが、JSONを返したり、リダイレクトしたり、APIを発動したり、ここで好き放題出来ます。

通常サイトのディレクトリ構造と大きく違うのは、別にリンクURLにフォルダやファイルがある必要がなく、適当なURLを設定できて、そこにアクセスがあれば、コールバックの内容を返せるという点ですかね。

今回の例で見ても、/aboutにaboutページが存在するわけではありません。

ここをこんな風にエンドポイントにして、JSONを送ることも可能です。


app.get('/app/music', (req, res)=>{
    res.json('{inu: meshi kuu na}');
})

勿論、appフォルダとかは存在する必要ないです。


app.listen(3333, ()=>{
    console.log("server running on Port:3333");
})

で、最後のこの行でサーバーの設定をしています。

app.listen(ポートナンバー, コールバック)です。

ポートナンバーは基本何番でもオーケーですが、nodeでは3000が一般的みたい。コールバックは、接続時に実行される関数。

3、プログラムの実行

コマンドライン cd で、app.jsの階層まで移動して、node app.js

ubuntu@ubuntu-aurora-r4:~/NodeSite/src$ node app.js
server running on Port:3333

サーバーが起動してるのが分かるね?
で、ブラウザを立ち上げて、窓に localhost:3333 って入れれば、/ が、localhost:3333/about っていれればaboutページが表示されます。
今回の設定は、あくまでもローカル環境内でのセットアップで、公開するにはAWSやherokuなんかのnodeに対応したサーバーにてデプロイする必要があります。
通常のHTMLページ等をhandlebarsを使ってレンダリングする方法は[次の記事](https://qiita.com/monsoonTropicalBird/items/fca2a08336b7176ddfcf)で。
画像を幾つかアップロードしたかったんだけど、スクリーンショットの加工が面倒なのと、Qiitaでどう埋め込むのか調べるのが面倒くさかったので、今回は無しでござる。
小生の自習用備忘録でもあるので、乱文誤字脱字失礼つかまつる!押忍
27
26
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?