Node.jsでファイル共有!ローカルネットワークでファイルサーバーを構築

2024-04-02

Node.jsで静的ファイルサーバーを簡単に構築

準備

まず、Node.jsをインストールする必要があります。以下のコマンドを実行してインストールできます。

npm install -g nodejs

次に、プロジェクトフォルダを作成して、そこに以下のファイルを作成します。

  • index.js:サーバーのコード
  • package.json:プロジェクトの設定ファイル

サーバーコード

index.jsファイルには、以下のコードを記述します。

const http = require('http');
const fs = require('fs');

const port = 8080;

const server = http.createServer((req, res) => {
  const url = req.url;
  const path = `./public${url}`;

  fs.readFile(path, (err, data) => {
    if (err) {
      res.writeHead(404, { 'Content-Type': 'text/plain' });
      res.end('Not found');
    } else {
      res.writeHead(200, { 'Content-Type': 'text/html' });
      res.end(data);
    }
  });
});

server.listen(port, () => {
  console.log(`Server listening on port ${port}`);
});

このコードは、以下の処理を行います。

  1. httpモジュールとfsモジュールを読み込みます。
  2. ポート番号8080でサーバーを作成します。
  3. リクエストを受け取った時に、リクエストされたファイルを読み込みます。
  4. ファイルが見つかった場合は、200 OKステータスコードとファイルの内容を返します。
  5. ファイルが見つからない場合は、404 Not Foundステータスコードとエラーメッセージを返します。

設定ファイル

{
  "name": "my-file-server",
  "version": "1.0.0",
  "description": "A simple file server",
  "main": "index.js",
  "dependencies": {
    "http": "^2.8.1",
    "fs": "^0.0.1"
  }
}

このファイルは、プロジェクトの名前、バージョン、依存関係などを記述します。

サーバーの起動

以下のコマンドを実行して、サーバーを起動します。

npm start

サーバーが起動したら、ブラウザでhttp://localhost:8080を開くと、publicフォルダ内のファイルが表示されます。

今回紹介した方法は、Node.jsを使って静的ファイルサーバーを簡単に構築する方法です。この方法を参考に、自分だけのファイルサーバーを作ってみてください。




Node.jsで静的ファイルサーバーを構築するサンプルコード

// index.js

const http = require('http');
const fs = require('fs');

const port = 8080;
const publicPath = './public';

const server = http.createServer((req, res) => {
  const url = req.url;
  const path = `${publicPath}${url}`;

  // ファイルが存在するかどうかを確認
  fs.stat(path, (err, stats) => {
    if (err) {
      // ファイルが見つからない場合は404エラー
      res.writeHead(404, { 'Content-Type': 'text/plain' });
      res.end('Not found');
      return;
    }

    // ファイルが見つかった場合は内容を読み込み、送信
    if (stats.isFile()) {
      fs.readFile(path, (err, data) => {
        if (err) {
          // ファイル読み込みエラーの場合は500エラー
          res.writeHead(500, { 'Content-Type': 'text/plain' });
          res.end('Internal server error');
          return;
        }

        // ファイル内容を送信
        res.writeHead(200, { 'Content-Type': getContentType(path) });
        res.end(data);
      });
    } else {
      // ディレクトリの場合はindex.htmlを送信
      const indexPath = `${path}/index.html`;
      fs.readFile(indexPath, (err, data) => {
        if (err) {
          // index.htmlが見つからない場合は404エラー
          res.writeHead(404, { 'Content-Type': 'text/plain' });
          res.end('Not found');
          return;
        }

        // index.htmlを送信
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end(data);
      });
    }
  });
});

server.listen(port, () => {
  console.log(`Server listening on port ${port}`);
});

// ファイルの拡張子からContent-Typeを取得
function getContentType(path) {
  const ext = path.split('.').pop();
  switch (ext) {
    case 'html':
      return 'text/html';
    case 'css':
      return 'text/css';
    case 'js':
      return 'application/javascript';
    case 'png':
      return 'image/png';
    case 'jpg':
      return 'image/jpeg';
    case 'gif':
      return 'image/gif';
    default:
      return 'text/plain';
  }
}

このコードをindex.jsファイルとして保存し、以下のコマンドを実行してサーバーを起動します。

npm start
  • ファイルが存在するかどうかを確認する処理
  • ディレクトリの場合はindex.htmlを送信する処理
  • ファイルの拡張子からContent-Typeを取得する処理

応用

このサンプルコードを参考に、以下の機能を追加してみましょう。

  • ユーザー認証機能
  • ファイルのアップロード機能

これらの機能を追加することで、より高度なファイルサーバーを作ることができます。




Node.jsで静的ファイルサーバーを構築する他の方法

フレームワークを使う

Expressなどのフレームワークを使うと、簡単に静的ファイルサーバーを構築できます。

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

app.use(express.static('./public'));

app.listen(8080, () => {
  console.log('Server listening on port 8080');
});

このコードは、Expressフレームワークを使って静的ファイルサーバーを構築する例です。

Koaを使う

Koaは、Expressよりも軽量なフレームワークです。

const Koa = require('koa');
const app = new Koa();

app.use(require('koa-static')('./public'));

app.listen(8080, () => {
  console.log('Server listening on port 8080');
});

サーバーモジュールを使う

httpモジュールなどのサーバーモジュールを使って、自分でサーバーを構築することもできます。

const http = require('http');
const fs = require('fs');

const port = 8080;

const server = http.createServer((req, res) => {
  const url = req.url;
  const path = `./public${url}`;

  fs.readFile(path, (err, data) => {
    if (err) {
      res.writeHead(404, { 'Content-Type': 'text/plain' });
      res.end('Not found');
    } else {
      res.writeHead(200, { 'Content-Type': 'text/html' });
      res.end(data);
    }
  });
});

server.listen(port, () => {
  console.log(`Server listening on port ${port}`);
});
  • 簡単なサーバーを構築したい場合は、フレームワークを使うのがおすすめです。

node.js http fileserver


最適なWebサーバーとサーバーサイドフレームワークの選択:プロジェクトのニーズに合わせたガイド

Apacheは、世界で最も人気のあるWebサーバーのひとつです。静的コンテンツの配信、動的コンテンツの生成、セキュリティなど、幅広い機能を提供しています。Apacheの利点:安定性と信頼性が高い大規模なトラフィックを処理できる豊富なモジュールとライブラリが存在する...


npm-shrinkwrap.json、Yarn、Heroku Buildpacksを使って依存関係を管理する方法

容量: node_modulesフォルダは巨大になりやすく、リポジトリの容量を圧迫します。依存関係の管理: npmやYarnなどのパッケージマネージャーを使って依存関係を管理しているので、重複してコミットする必要はありません。再現性: 異なる環境で同じアプリを構築する場合、node_modulesフォルダをコミットすると依存関係のバージョンが固定されてしまい、環境間の差異が生じる可能性があります。...


JavaScriptとNode.jsにおける「Invalid shorthand property initializer」エラーの原因と解決方法

JavaScriptとNode. jsでオブジェクトリテラルを使用する際に、「Invalid shorthand property initializer」というエラーが発生することがあります。これは、オブジェクトプロパティの初期化に省略記法を使用する際に、構文エラーが発生していることを示します。...


【決定版】Node.js、Linux、MongoDBで「MongoError: connect ECONNREFUSED 127.0.0.1:27017」エラーが発生した時の解決策集

"MongoError: connect ECONNREFUSED 127. 0.0.1:27017" エラーは、Node. jsアプリケーションでMongoDBに接続しようとした際に発生します。このエラーは、MongoDBサーバーが起動していないか、接続に問題があることを示しています。...


Nest.js でダイナミックインジェクションを使用して別モジュールからサービスを注入する方法

Nest. js で別モジュールからサービスを注入するには、いくつかの方法があります。ここでは、最も一般的な方法をいくつか紹介します。プロバイダーは、Nest. js においてサービスを登録および管理するための主要なメカニズムです。サービスを注入するには、まずそのサービスをプロバイダーとして登録する必要があります。これは、@Injectable() デコレータと @Inject() デコレータを使用して行うことができます。...


SQL SQL SQL SQL Amazon で見る



Node.jsでHello World!を表示するWebサーバーを作ってみよう

まず、Node. js がインストールされている必要があります。インストールされていない場合は、Node. js の公式サイトからダウンロードできます。以下のコードは、"Hello World!" という文字列をブラウザに表示する簡単な Web サーバーを作成します。


Node.jsにおけるエラー処理のベストプラクティス

そこで、Node. jsにおける例外処理のベストプラクティスについて解説します。Node. jsでは、主に2種類のエラーが発生します。予期せぬエラー: プログラミングミスや環境問題によって発生するエラー。予期されるエラー: 入力データの不備など、プログラムの正常な動作によって発生するエラー。