Node.jsクイックファイルサーバー(HTTP経由の静的ファイル)


642

Node.jsのすぐに使えるツール( npm)はありますか。これは、HTTP経由でフォルダーコンテンツをファイルサーバーとして公開するのに役立ちます。

例、私が持っている場合

D:\Folder\file.zip
D:\Folder\file2.html
D:\Folder\folder\file-in-folder.jpg

それから始めてD:\Folder\ node node-file-server.js 私はファイルにアクセスできました

http://hostname/file.zip
http://hostname/file2.html
http://hostname/folder/file-in-folder.jpg

ノードの静的ファイルサーバーがリクエストをドロップするのはなぜですか? いくつかの神秘的な参照

標準のnode.js静的ファイルサーバー

そのようなツールがない場合、どのフレームワークを使用すればよいですか?

関連: NodeJSの基本的な静的ファイルサーバー


私はこれを可能にするCachemereと呼ばれるモジュールを書きました。また、すべてのリソースを自動的にキャッシュします。それをチェックしてください:github.com/topcloud/cachemere
Jon

npmjs.com/package/local-web-server-軽量の静的Webサーバー、ゼロ構成
Victor

回答:


1090

「すぐに使えるツール」としては、http-serverが最適です。

npm install http-server -g

それを使用するには:

cd D:\Folder
http-server

または、このように:

http-server D:\Folder

それをチェックしてくださいhttps//github.com/nodeapps/http-server


10
これは素晴らしいです。何らかの理由でアドレスbcを指定する必要がありました。デフォルトの0.0.0.0が私の開発環境と連携していませんでした。http-server -a localhostええと。
Sam Berry、

41
使用http-server -a localhost -p 80
Muhammad Umer、2015

10
ブラウザ同期もチェックする価値があります。これは、ほぼ同じことを実行できますが、ファイルが変更されたときにライブ更新のボーナスが追加されます。
Nick F

3
--corsAccess-Control-Allow-Origin:*応答ヘッダーと一緒に送信する(つまり、jsonファイルを提供する場合)
Daniel F

9
npx http-server-npxは、必要なファイルをダウンロードして実行するワンライナーに変換します。
マイクマッケイ

186

準備ができたツールを使用したくない場合は、https//developer.mozilla.org/en-US/docs/Node_server_without_frameworkで私が示したように、以下のコードを使用できます

var http = require('http');
var fs = require('fs');
var path = require('path');

http.createServer(function (request, response) {
    console.log('request starting...');

    var filePath = '.' + request.url;
    if (filePath == './')
        filePath = './index.html';

    var extname = path.extname(filePath);
    var contentType = 'text/html';
    switch (extname) {
        case '.js':
            contentType = 'text/javascript';
            break;
        case '.css':
            contentType = 'text/css';
            break;
        case '.json':
            contentType = 'application/json';
            break;
        case '.png':
            contentType = 'image/png';
            break;      
        case '.jpg':
            contentType = 'image/jpg';
            break;
        case '.wav':
            contentType = 'audio/wav';
            break;
    }

    fs.readFile(filePath, function(error, content) {
        if (error) {
            if(error.code == 'ENOENT'){
                fs.readFile('./404.html', function(error, content) {
                    response.writeHead(200, { 'Content-Type': contentType });
                    response.end(content, 'utf-8');
                });
            }
            else {
                response.writeHead(500);
                response.end('Sorry, check with the site admin for error: '+error.code+' ..\n');
                response.end(); 
            }
        }
        else {
            response.writeHead(200, { 'Content-Type': contentType });
            response.end(content, 'utf-8');
        }
    });

}).listen(8125);
console.log('Server running at http://127.0.0.1:8125/');

UPDATE 外部のデマンド/ファイルからサーバーにアクセスする必要がある場合は、前の回答でここで述べたように、node.jsファイルでCORSを克服する必要があります。

// Website you wish to allow to connect
response.setHeader('Access-Control-Allow-Origin', '*');

// Request methods you wish to allow
response.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

// Request headers you wish to allow
response.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
response.setHeader('Access-Control-Allow-Credentials', true);

更新

エイドリアンが述べたように、コメントで、彼はここに完全な説明を含むES6コードを書きました。コードが元のサイトから何らかの理由で失われた場合に備えて、私は彼のコードを以下に再投稿します。

const http = require('http');
const url = require('url');
const fs = require('fs');
const path = require('path');
const port = process.argv[2] || 9000;

http.createServer(function (req, res) {
  console.log(`${req.method} ${req.url}`);

  // parse URL
  const parsedUrl = url.parse(req.url);
  // extract URL path
  let pathname = `.${parsedUrl.pathname}`;
  // based on the URL path, extract the file extention. e.g. .js, .doc, ...
  const ext = path.parse(pathname).ext;
  // maps file extention to MIME typere
  const map = {
    '.ico': 'image/x-icon',
    '.html': 'text/html',
    '.js': 'text/javascript',
    '.json': 'application/json',
    '.css': 'text/css',
    '.png': 'image/png',
    '.jpg': 'image/jpeg',
    '.wav': 'audio/wav',
    '.mp3': 'audio/mpeg',
    '.svg': 'image/svg+xml',
    '.pdf': 'application/pdf',
    '.doc': 'application/msword'
  };

  fs.exists(pathname, function (exist) {
    if(!exist) {
      // if the file is not found, return 404
      res.statusCode = 404;
      res.end(`File ${pathname} not found!`);
      return;
    }

    // if is a directory search for index file matching the extention
    if (fs.statSync(pathname).isDirectory()) pathname += '/index' + ext;

    // read file from file system
    fs.readFile(pathname, function(err, data){
      if(err){
        res.statusCode = 500;
        res.end(`Error getting the file: ${err}.`);
      } else {
        // if the file is found, set Content-type and send data
        res.setHeader('Content-type', map[ext] || 'text/plain' );
        res.end(data);
      }
    });
  });


}).listen(parseInt(port));

console.log(`Server listening on port ${port}`);

2
きっとresponse.writeHead(200そうなるはずですresponse.writeHead(404;)
Thomas Hunter II

14
そのコードは、127.0.0.1 /../../../ etc / passwdのようなことを実行してファイルツリーを上に移動することを許可しませんか?それに対するチェックはありません。
2016年

3
ES6 +バージョンに興味がある場合は、MIMEタイプを処理する静的ファイルサーバーを作成しました: gist.github.com/amejiarosario/53afae82e18db30dadc9bc39035778e5
Adrian

1
@Adrianこのコードは非常に素晴らしいですが、私はそれを使ってrootアクセスを取得する方法を見つけました。解決策は、ファイル名の先頭のピリオドの数を1つに制限して、何かを実行できないようにすること../../etc/passwordです。 gist.github.com/amejiarosario/53afae82e18db30dadc9bc39035778e5
Seph Reed

1
pathname = pathname.replace(/^(\.)+/, '.');
Seph Reed

79

NodeJSスクリプト内から実行可能なサーバーを必要とする人のために:

代わりのexpressjs / serve-staticを使用できますconnect.static(connect 3以降は使用できなくなります)。

myapp.js:

var http = require('http');

var finalhandler = require('finalhandler');
var serveStatic = require('serve-static');

var serve = serveStatic("./");

var server = http.createServer(function(req, res) {
  var done = finalhandler(req, res);
  serve(req, res, done);
});

server.listen(8000);

そしてコマンドラインから:

  • $ npm install finalhandler serve-static
  • $ node myapp.js

1
FYIこれは私にとってはうまくいきませんでした。を使用npm install filehandlerしてfilehandlerをインストールすると、パッケージがnode_modulesディレクトリにリストされます。しかし、myapp.jsノードを実行するとエラーがスローされますError: cannot find module filehandler。ファイルハンドラーをロードするためのrequireステートメントをコメントアウトすると、アプリは問題なくserve-staticをロードするため、filhandlerパッケージに問題があるように見えます。今日は2014年12月12日なので、この回答が投稿されてからパッケージが変更された可能性がありますか?
Lee Jenkins

7
それのfinalハンドラではないfile
jakub.g

このソリューションのもう1つの利点は、ファイルがキャッシュされないため、コードを変更するときにプロセスを再起動する必要がないことです。
klimat

59

Nodeではないことは知っていますが、PythonのSimpleHTTPServerを使用しました。

python -m SimpleHTTPServer [port]

それはうまく機能し、Pythonが付属しています。


16
Python3での同等機能:(python -m http.server [port]上記のものはPython2向けです)
jakub.g '19年

OSイメージのような大きなファイルを処理する場合、Pythonは失敗します。Fedora 23
Zimy

9
PHPの場合:php -S localhost:8000
デニス2017

これを使用して、常にフォルダーからコンテンツをすばやく提供します。
エイドリアンリンチ2017年

33

接続はあなたが探しているものかもしれません。

簡単にインストール:

npm install connect

次に、最も基本的な静的ファイルサーバーを次のように記述します。

var connect = require('connect'),
    directory = '/path/to/Folder';

connect()
    .use(connect.static(directory))
    .listen(80);

console.log('Listening on port 80.');

4
これは公開しないため、connect 3以降は機能しませんconnect.static。代替品については、以下の私の回答を参照してください
jakub.g 14

4
デフォルトでは引き続きExpressにバンドルされていると思いますが、実際には現在、require「serve-static」という別のモジュールに存在しています。
Oleg

18

npmを使用してExpressをインストールします:https : //expressjs.com/en/starter/installing.html

次のコンテンツを使用して、index.htmlと同じレベルにserver.jsという名前のファイルを作成します。

var express = require('express');
var server = express();
server.use('/', express.static(__dirname + '/'));
server.listen(8080);

別の場所に配置する場合は、3行目にパスを設定します。

server.use('/', express.static(__dirname + '/public'));

次のコマンドを使用して、ファイルを含むフォルダーに移動し、コンソールからノードを実行します。

node server.js

localhost:8080に移動します


1
こんにちは、正しく実行できますが、が表示されますCannot GET /。AWS EC2を使用してサーバーを実行しています。
Wei Xia

1
@Weiこんにちは、遅い答え。簡単なGoogle検索からわかるように、ディレクトリ構造が間違っている可能性があります。ターゲットとする場所にindex.htmlファイルが存在する必要があります。上記の例を実行するように設定するのに5分かかり、それがそのまま機能することを確認しました。そこから、ディレクトリ構造に合わせてパスを調整し、サーバーがサーバーに必要なファイルをまだ見つけていることを確認できます。
pasx 16

path.join(__dirname, 'public')よりクロスプラットフォームです。
sdgfsdh 2017

17

PromiseではなくOne-Line™Proofs

ここに画像の説明を入力してください

最初はhttp-serverhs- リンクです

npm i -g http-server   // install
hs C:\repos            // run with one line?? FTW!!

2番目はserveZEIT.coによる- リンク

npm i -g serve         // install
serve C:\repos         // run with one line?? FTW!!

これが決定に役立つ場合は、次のオプションを使用できます。

C:\ Users \ Qwerty> http-server --help
使用法:http-server [パス] [オプション]

オプション:
  -p使用するポート[8080]
  -a使用するアドレス[0.0.0.0]
  -dディレクトリリストを表示します[true]
  -i autoIndexを表示します[true]
  -g --gzip可能な場合はgzipファイルを提供します[false]
  -e --ext何も指定されていない場合のデフォルトのファイル拡張子[なし]
  -s --silent出力からのログメッセージを抑制します
  --cors [= headers]「Access-Control-Allow-Origin」ヘッダーを介してCORSを有効にします
                     オプションで、カンマで区切られたCORSヘッダーリストを提供する
  -o [パス]サーバーの起動後にブラウザウィンドウを開きます
  -c秒単位のキャッシュ時間(最大経過時間)[3600]。たとえば、10秒間の-c10。
               キャッシングを無効にするには、-c-1を使用します。
  -U --utcログメッセージでUTC時間形式を使用します。

  -P --proxyリクエストを解決できない場合のフォールバックプロキシ。例:http://someurl.com

  -S --ssl httpsを有効にします。
  -C --cert ssl certファイルへのパス(デフォルト:cert.pem)。
  -K --key sslキーファイルへのパス(デフォルト:key.pem)。

  -r --robots /robots.txtに応答します[ユーザーエージェント:* \ n許可しない:/]
  -h --helpこのリストを印刷して終了します。
C:\ Users \ Qwerty> serve --help

  使用法:serve.js [オプション] [コマンド]

  コマンド:

    ヘルプを表示する

  オプション:

    -a、-auth基本認証の背後で機能します
    -c、--cacheブラウザでファイルをキャッシュする時間(ミリ秒)
    -n、--cliplessアドレスをクリップボードにコピーしない(デフォルトでは無効)
    -C、--cors Setup * CORSヘッダーにより、任意のオリジンからのリクエストを許可(デフォルトでは無効)
    -h、--help使用法情報を出力します
    -i、--ignore無視するファイルとディレクトリ
    -o、--openブラウザでローカルアドレスを開く(デフォルトでは無効)
    -p、-port待機するポート(デフォルトは5000)
    -S、--silentコンソールに何も記録しません
    -s、-single単一ページアプリケーション( `-c`を1日に設定)
    -t、--treeless静的ツリーを表示しない(デフォルトでは無効)
    -u、-unzipped GZIP圧縮を無効にします
    -v、--versionバージョン番号を出力します

変化を監視する必要がある場合は、を参照してhostrヘンリー・ツェンの答えを信用してください


14

デモ/プロトコルサーバーのみ

それで十分な場合は、次のことを試してください。

const http = require('http');
const fs = require('fs');
const port = 3000;
const app = http.createServer((req,res) => {
    res.writeHead(200);
    if (req.url === '/') req.url = '/index.html'; // courtesy of @JosephCho
    res.end(fs.readFileSync(__dirname + req.url));
});

app.listen(port);

注:アドレスの一部として「/index.html」を使用する必要があります。つまり、「http:// localhost:3000 / index.html


2
同期バージョンは使用しないでください。Instreadは、readStreamからresへのパイプを作成します。
エデュアルドボンダレンコ2017年

1
あなたが速くて汚い1回限りのワントリックポニーが必要な場合の最良の答え。
折りたたみ式2018

1
あなたが使用しないようにしたい場合はindex.html、あなたのアドレスの一部としてだけ追加if (req.url === '/') req.url = '/index.html';直後にres.writeHead(200);
ジョセフチョ

3
@EduardBondarenkoは正しいです。const stream = fs.createReadStream(...); stream.pipe(res);必要なものはすべて
Justin Meiners

8

非常に優れた別の静的Webサーバーがあります:browser-sync。

ノードパッケージマネージャーを使用してダウンロードできます。

npm install -g browser-sync

インストール後、cmdプロンプトでプロジェクトフォルダーに移動し、次のコマンドを実行します。

browser-sync start --server --port 3001 --files="./*"

ブラウザの現在のフォルダにあるすべてのファイルのケータリングを開始します。

BrowserSyncから詳細を確認できます

ありがとう。


2
他の静的サーバーではなくBrowsersyncを使用する利点は、--filesフラグで指定されたファイルが変更されるたびにライブでページが更新されることです(nb。指定する必要はあり./*ません-Browsersyncに更新をアクティブに監視させたいファイルのみ)。 。css/*.css
Nick F

7

私はこのページの答えのどれにもあまり運がありませんでした、しかし、以下はトリックをするようでした。

server.js次の内容のファイルを追加します。

const express = require('express')
const path = require('path')
const port = process.env.PORT || 3000
const app = express()

// serve static assets normally
app.use(express.static(__dirname + '/dist'))

// handle every other route with index.html, which will contain
// a script tag to your application's JavaScript file(s).
app.get('*', function (request, response){
  response.sendFile(path.resolve(__dirname, 'dist', 'index.html'))
})

app.listen(port)
console.log("server started on port " + port)

また、必要なことを確認してくださいexpress。実行するyarn add express --savenpm install express --save、セットアップに応じて(yarnかなり高速であることをお勧めします)。

distコンテンツを提供しているフォルダに変更できます。私の単純なプロジェクトでは、どのフォルダーからもサービスを提供していなかったので、distファイル名を削除しただけです。

次に、実行することができますnode server.js。プロジェクトをHerokuサーバーにアップロードする必要があったので、package.jsonファイルに以下を追加する必要がありました。

  "scripts": {
    "start": "node server.js"
  }

6

Expressフレームワークを使用する場合、この機能はすぐに使用できます。

シンプルなファイルサービスアプリをセットアップするには、次のようにします。

mkdir yourapp
cd yourapp
npm install express
node_modules/express/bin/express

$ npm install -g expressを実行できますか?それらは$表現しますか?
ポールベレスト2013年

私はあなたの手順に従いましたが、私のExpressにはbinフォルダーがありません
Qwerty

6

ここで私は、その使用は、(あなたのLinux / Unixの/ MacOSの端末でこのコマンドを発行するように簡単のようになり、迅速かつ豊富なツールであると考えていることを無依存と私の1ファイル/軽量Node.jsの静的ファイルWebサーバのペットのプロジェクトですまたはAndroidのtermux)、node.js(またはnodejs-legacyDebian / Ubuntu)がインストールされている場合:

curl pad.js.org | node 

(ドキュメントには、Windowsユーザー用に異なるコマンドが存在します)

役立つと思われるさまざまなことをサポートします。

  • 階層ディレクトリインデックスの作成/提供
    • さまざまな基準でのソート機能付き
    • [マルチファイル]ドラッグアンドドロップ、ファイル/テキストのみのコピー、ブラウザでのアップロード、システムクリップボードのスクリーンショットの貼り付け(Chrome、Firefox、その他のブラウザー)には、いくつかの制限があります(コマンドラインでオフにすることができます)。それが提供するオプション)
    • フォルダ/ノート作成/アップロードボタン
  • よく知られているファイルタイプの正しいMIMEを提供する(無効にする可能性あり)
  • npmパッケージとローカルツールとしてのインストール、またはDockerを使用した永続的なサービスとしての1線形インストールの可能性
  • より高速な転送のためのHTTP 206ファイルサービス(マルチパートファイル転送)
  • ターミナルおよびブラウザコンソールからのアップロード(実際には、他のページ/ドメインのブラウザのJSコンソール用のファイルシステムプロキシを意図したものでした)
  • CORSダウンロード/アップロード(これもオフにすることができます)
  • 簡単なHTTPS統合
  • より安全なサービスを実現するための軽量のコマンドラインオプション:
    • node.js 8のパッチを使用すると、最初にインストールしなくてもオプションにアクセスできます。curl pad.js.org | node - -h
    • または、まずシステムグローバルnpmパッケージとしてインストールし[sudo] npm install -g pad.js、次にインストールされているバージョンを使用してオプションにアクセスします。pad -h
    • または、デフォルトで比較的安全なオプションを使用する、提供されているDockerイメージを使用します。 [sudo] docker run --restart=always -v /files:/files --name pad.js -d -p 9090:9090 quay.io/ebraminio/pad.js

ツールを使用したフォルダーインデックスのスクリーンショット

上記の機能の大部分は、ツールhttp://pad.js.orgのメインページに記載されています。私が使用したいくつかの素晴らしいトリックによって、ツールソース自体も提供されています。

ツールのソースはGitHubにあり、フィードバック、機能リクエスト、および!


5

npm@5.2.0以降、npmと呼ばれる通常のnpmとともに新しいバイナリのインストールを開始しましたnpx。さて、現在のディレクトリから静的httpサーバーを作成する1つのライナー:

npx serve

または

npx http-server

4

静的リソースを提供するためにノードを使用してパフォーマンスを正常に向上させるには、ビュッフェの使用をお勧めします。これは、キャッシングHTTPリバースプロキシとも呼ばれるWebアプリケーションアクセラレータと同様に機能しますが、選択したディレクトリをメモリにロードするだけです。

Buffetは完全にバッファリングされたアプローチをとります。アプリの起動時にすべてのファイルがメモリに完全に読み込まれるため、ファイルシステムの書き込みを感じることはありません。実際には、これは非常に効率的です。ワニスをアプリの前に置くと、さらに遅くなる可能性があります。 

これをcodePileサイトで使用したところ、1Kの同時ユーザー接続負荷で25のリソースをダウンロードするページで、最大700リクエスト/秒から4,000リクエスト/秒に増加しました。

例:

var server = require('http').createServer();

var buffet = require('buffet')(root: './file'); 

 

server.on('request', function (req, res) {

  buffet(req, res, function () {

    buffet.notFound(req, res);

  });

});

 

server.listen(3000, function () {

  console.log('test server running on port 3000');

});


4

以下は私のために働きました:

app.js以下の内容のファイルを作成します。

// app.js

var fs = require('fs'),
    http = require('http');

http.createServer(function (req, res) {
  fs.readFile(__dirname + req.url, function (err,data) {
    if (err) {
      res.writeHead(404);
      res.end(JSON.stringify(err));
      return;
    }
    res.writeHead(200);
    res.end(data);
  });
}).listen(8080);

index.html以下の内容のファイルを作成します。

Hi

コマンドラインを開始します。

cmd

以下で実行cmd

node app.js

クロムで、URLの下に移動します。

http://localhost:8080/index.html

それで全部です。お役に立てば幸いです。

ソース:https : //nodejs.org/en/knowledge/HTTP/servers/how-to-serve-static-files/


3

あなたはサーブミーを試すことができます

使い方はとても簡単です:

ServeMe = require('serve-me')();
ServeMe.start(3000);

それで全部です。

PD:デフォルトで提供されるフォルダは「パブリック」です。



3

単純なnode.jsの場合:

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

process.on('uncaughtException', err => console.error('uncaughtException', err))
process.on('unhandledRejection', err => console.error('unhandledRejection', err))

const publicFolder = process.argv.length > 2 ? process.argv[2] : '.'
const port = process.argv.length > 3 ? process.argv[3] : 8080

const mediaTypes = {
  zip: 'application/zip',
  jpg: 'image/jpeg',
  html: 'text/html',
  /* add more media types */
}

const server = http.createServer(function(request, response) {
  console.log(request.method + ' ' + request.url)

  const filepath = path.join(publicFolder, request.url)
  fs.readFile(filepath, function(err, data) {
    if (err) {
      response.statusCode = 404
      return response.end('File not found or you made an invalid request.')
    }

    let mediaType = 'text/html'
    const ext = path.extname(filepath)
    if (ext.length > 0 && mediaTypes.hasOwnProperty(ext.slice(1))) {
      mediaType = mediaTypes[ext.slice(1)]
    }

    response.setHeader('Content-Type', mediaType)
    response.end(data)
  })
})

server.on('clientError', function onClientError(err, socket) {
  console.log('clientError', err)
  socket.end('HTTP/1.1 400 Bad Request\r\n\r\n')
})

server.listen(port, '127.0.0.1', function() {
  console.log('👨‍🔧 Development server is online.')
})

これは、特定のディレクトリで要求されたファイルのみを提供する単純なnode.jsサーバーです。

使用法:

node server.js folder port

folderserver.js場所に応じて、絶対的または相対的な場合があります。デフォルト値は.node server.jsコマンドを実行するディレクトリです。

port デフォルトは8080ですが、OSで使用可能な任意のポートを指定できます。

あなたの場合、私はします:

cd D:\Folder
node server.js

次のようにD:\Folder入力すると、ブラウザからファイルを参照できますhttp://127.0.0.1:8080/somefolder/somefile.html


2

それはまだNPMにはありませんが、フォームの送信を受け入れ、トランザクションメールサービス(現時点ではSendgrid、今後はMandrill)を介してメールを送信できるようにするExpressに単純な静的サーバーを構築しました。

https://github.com/jdr0dn3y/nodejs-StatServe


2

検索者のために、私はJakub gの答えが好きでしたが、少しエラーを処理したかったのです。明らかにエラーを適切に処理することが最善ですが、これはエラーが発生した場合にサイトが停止するのを防ぐのに役立つはずです。以下のコード:

var http = require('http');
var express = require('express');

process.on('uncaughtException', function(err) {
  console.log(err);
});

var server = express();

server.use(express.static(__dirname));

var port = 10001;
server.listen(port, function() { 
    console.log('listening on port ' + port);     
    //var err = new Error('This error won't break the application...')
    //throw err
});

更新-私の回答は機能しますが、http-serverを使用するという@Matt Selfの回答を使用します。うまくいくようです。
HockeyJ 2015年

2

最初にnpm install node-static -g -g を介してノードスタティックサーバーをインストールし、システムにグローバルにインストールしてから、ファイルが配置されているディレクトリに移動し、static ポート8080でリッスンしてサーバーを起動し、ブラウザーにnaviagetを入力して、localhost:8080 / yourhtmlfilenameと入力します。 。


2

これにはNPM serveパッケージを使用できます。NodeJSが必要ない場合は、すばやく簡単に使用できるツールです。

1-PCにパッケージをインストールします。

npm install -g serve

2-静的フォルダーをserve <path>次のように提供します。

d:> serve d:\StaticSite

静的フォルダーが提供されているポートが表示されます。次のようにホストに移動します。

http://localhost:3000

あなたはそれnpmがノードパッケージマネージャーであることを理解しているので、実際にはNodeJSのものを使用しています
derickito

そうです、私が「NodeJSもの」として意図したことは、NodeJSを使用して、ほとんどの回答が示唆するようにファイルを提供するために表現することでした。Serveは独立した実行可能ファイルであり、NPMはそれをインストールするためだけに使用され、直接ダウンロードすることもできます。
ディエゴメンデス

1

NPMレジストリhttps://npmjs.org/search?q=serverで検索すると、static-server https://github.com/maelstrom/static-serverが見つかりました

同僚にファイルを送信する必要がありましたが、100MBの獣に電子メールを送るのは面倒ではありませんか?簡単なサンプルJavaScriptアプリケーションを実行したいのですが、file:///プロトコルを介した実行に問題がありますか?Samba、FTP、または構成ファイルを編集する必要のあるものをセットアップせずに、LANでメディアディレクトリを共有したいですか?次に、このファイルサーバーはあなたの生活を少し簡単にします。

単純な静的スタッフサーバーをインストールするには、npmを使用します。

npm install -g static-server

次に、ファイルまたはディレクトリを提供するには、単に実行します

$ serve path/to/stuff
Serving path/to/stuff on port 8001

フォルダーの内容を一覧表示することもできます。

残念ながら、それはファイルを提供できませんでした :)


5
そのサーバーを構築しました。そのファイルサーバーは非常に古いバージョンのノードに対して構築されたため、それ以上機能しません。現在、修正する時間はありません。上記の@Olegの回答を使用することをお勧めします。それは小さなノードの実行可能ファイルに簡単にバンドルすることができ、本質的に私がとにかくやったことです。
Tim Heap 2013年

ティム、プロの対応ありがとうございます。コードは削除しませんが、readmeを更新します。
ポールベレスト2013年



1

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


let mimeTypes = {
  '.html': 'text/html',
  '.css': 'text/css',
  '.js': 'text/javascript',
  '.jpg': 'image/jpeg',
  '.png': 'image/png',
  '.ico': 'image/x-icon',
  '.svg': 'image/svg+xml',
  '.eot': 'appliaction/vnd.ms-fontobject',
  '.ttf': 'aplication/font-sfnt'
};



http.createServer(function (request, response) {
  let pathName = url.parse(request.url).path;
  if(pathName === '/'){
    pathName = '/index.html';
  }
  pathName = pathName.substring(1, pathName.length);
  let extName = path.extName(pathName);
  let staticFiles = `${__dirname}/template/${pathName}`;

      if(extName =='.jpg' || extName == '.png' || extName == '.ico' || extName == '.eot' || extName == '.ttf' || extName == '.svg')
      {
          let file = fr.readFileSync(staticFiles);
          res.writeHead(200, {'Content-Type': mimeTypes[extname]});
          res.write(file, 'binary');
          res.end();
      }else {
        fs.readFile(staticFiles, 'utf8', function (err, data) {
          if(!err){
            res.writeHead(200, {'Content-Type': mimeTypes[extname]});
            res.end(data);
          }else {
            res.writeHead(404, {'Content-Type': 'text/html;charset=utf8'});
            res.write(`<strong>${staticFiles}</strong>File is not found.`);
          }
          res.end();
        });
      }
}).listen(8081);


このコードにいくつかの説明を追加する必要があります。
Abhinav Gauniyal

1

:あなたがすべての前提条件なしで超軽量のhttpサーバにintrestedている場合は、を見ている必要がありマングース



0

また、リクエストがドロップする理由も尋ねました-ケースの具体的な理由は不明ですが、Nodeはこのネットワークパターンに対して実際に最適化されていないため、全体的には専用ミドルウェア(nginx、S3、CDN)を使用してサーバーの静的コンテンツを改善します。詳細については、こちら(箇条書き13)を参照してください。http//goldbergyoni.com/checklist-best-practice-of-node-js-in-production/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.