Does not provide fallback content when JavaScript is not available. このサイトを視聴するにはJavaScriptを有効にしてください。node.jsなんかでオンラインなゲームを作る(3) フレームワークであるExpressの設定 | blog.potproject.net

node.jsなんかでオンラインなゲームを作る(3) フレームワークであるExpressの設定

前回

Expressはnode.jsで動作するフレームワークです。多分nodeの中では一番有名で、これを使うことでWebサーバの操作がぐっと楽になると思います。

Express Fast, unopinionated, minimalist web framework for Node.js

これがなくてもhttpサーバは立てられますが、変数を入れたりPOSTを処理したりなど複雑な操作は、コードを書いて処理しないといけません。 そういうのを一括で解決してくれるものをフレームワークと呼びます。

元々Androidアプリばっかり作ってたのでWebフレームワークというものをほとんど使ったことが無かった私なのですが、 これを使うとWeb開発がめちゃくちゃ楽になり、やらないといけない作業も数段減るため、 最近のWeb開発においてはフレームワークはほぼ必須なんだなあと使ってると思います。

Express設定

一部抜粋。全文はソースにて。

var express = require('express')
  , http = require('http')
  , path = require('path')
  , socketio = require('socket.io')
  , fs = require('fs')
  , mongoose = require('mongoose')
  , ejs=require('ejs');
var app = express();
var server = http.createServer(app);
var io = socketio.listen(server);

//expressの設定(socket.ioは関係ないです)
app.set('port', process.env.PORT || 8080); //portを指定(デフォルト:8080)
app.set('view engine', 'ejs'); //ejsを使用
app.use(express.favicon()); //標準faviconを出力
app.use(express.logger('dev')); //logger:開発用に詳細ログが表示されるようになります
app.use(express.json()); //bodyParser絡み
app.use(express.urlencoded()); //bodyParser絡み
app.use(express.methodOverride()); //methodOverride ミドルウェア
app.use(app.router); //パス名絡み
app.use(express.static(path.join(\_\_dirname, 'img'))); //staticなディレクトリ

expressの設定は結構いろいろあってこれはこれで覚えるところ多くて大変。 コメントで簡単な説明を付けましたが、自分も完全な中身は知らないので各自ググってください。

app.use(express.favicon()); は、別にfaviconいらないし付ける必要もないのですが、これがないとコンソールさんにfaviconねーぞと怒られるので付けました。

app.use(express.json()); app.use(express.urlencoded()); は、前話したbodyparser絡みの設定。これを入れておかないとpostした時とかエラー吐きますのでとりあえず入れておきましょう。

app.use(express.static(path.join(__dirname, 'img'))); Express.staticは、指定したファイル/ディレクトリをスタティックなファイルとして公開します。 つまり、http上でディレクトリ内の画像やjsファイルなど、誰でもアクセスが可能になります。 ディレクトリの指定も可能です。(ディレクトリ内のファイルが全て公開されます) path.joinは、絶対パスで指定しなければならないために使用します。

__dirnameは、実行しているjsファイルのディレクトリパスを表します。

この後は、アクセスされた時の処理を書いていきます。

githubにソースがあります。