Node.jsでファイル共有!ローカルネットワークでファイルサーバーを構築
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}`);
});
このコードは、以下の処理を行います。
http
モジュールとfs
モジュールを読み込みます。- ポート番号8080でサーバーを作成します。
- リクエストを受け取った時に、リクエストされたファイルを読み込みます。
- ファイルが見つかった場合は、200 OKステータスコードとファイルの内容を返します。
- ファイルが見つからない場合は、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