非常に単純なHTTPサーバーを実行したいです。 example.com
へのすべてのGETリクエストは、それにindex.html
を提供されるべきですが、通常のHTMLページとして提供されるべきです(すなわち、通常のWebページを読んだときと同じ経験)。
以下のコードを使って、私はindex.html
の内容を読むことができます。 index.html
を通常のWebページとして提供するにはどうすればよいですか?
var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(index);
}).listen(9615);
以下の提案の1つは複雑で、使用したいリソース(CSS、JavaScript、画像)ファイルごとにget
行を書く必要があります。
いくつかの画像、CSS、およびJavaScriptを含む単一のHTMLページを提供する方法を教えてください。
このためにNode.jsで Connect および ServeStatic を使用できます。
NPMでconnectとserve-staticをインストールする
$ npm install connect serve-static
この内容でserver.jsファイルを作成します。
var connect = require('connect');
var serveStatic = require('serve-static');
connect().use(serveStatic(__dirname)).listen(8080, function(){
console.log('Server running on 8080...');
});
Node.jsで実行する
$ node server.js
http://localhost:8080/yourfile.html
に行くことができます
最も単純なNode.jsサーバーは以下のとおりです。
$ npm install http-server -g
これで、次のコマンドを使ってサーバーを起動することができます。
$ cd MyApp
$ http-server
NPM 5.2.0以降を使用している場合は、npx
と共にインストールしなくてもhttp-server
を使用できます。これは本番環境での使用にはお勧めできませんが、localhost上でサーバーをすばやく実行するための素晴らしい方法です。
$ npx http-server
または、Webブラウザを開いてCORS要求を有効にすると、これを試すことができます。
$ http-server -o --cors
その他のオプションについては、 GitHub のhttp-server
のドキュメント、または次のコマンドを実行してください。
$ http-server --help
NodeJitsuへの他のたくさんの素晴らしい機能と頭脳死の単純な展開。
フィーチャーフォーク
もちろん、あなた自身のフォークで簡単に機能を補うことができます。あなたはそれがこのプロジェクトの既存の800以上のフォークのうちの1つで既に行われたのを見つけるかもしれません:
Light Server:自動更新の代替案
http-server
に代わる素敵な方法は light-server
です。これはファイルの監視や自動更新、そしてその他多くの機能をサポートします。
$ npm install -g light-server
$ light-server
Windowsエクスプローラのディレクトリコンテキストメニューに追加
reg.exe add HKCR\Directory\Shell\LightServer\command /ve /t REG_EXPAND_SZ /f /d "\"C:\nodejs\light-server.cmd\" \"-o\" \"-s\" \"%V\""
単純なJSON RESTサーバー
プロトタイププロジェクト用の単純なRESTサーバーを作成する必要がある場合は、 json-server があなたの探しているものかもしれません。
自動更新エディタ
ほとんどのWebページエディタおよびIDEツールには、ソースファイルを監視し、変更時にWebページを自動更新するWebサーバーが含まれています。
オープンソース テキストエディタ 角括弧 にはNodeJS静的Webサーバーも含まれます。任意のHTMLファイルを角かっこで開くには、 "Live Preview"を押すだけで静的サーバーが起動し、 HTMLファイルを編集して保存するとブラウザは自動的に更新されます(複数のブラウザ/ウィンドウサイズ/デバイスでHTMLページを開くとすぐに表示されます)。アダプティブなものがallオートリフレッシュのように機能している場合。
PhoneGap開発者
ハイブリッドモバイルアプリ をコーディングしている場合は、 PhoneGap チームがこの自動更新の概念を新しい PhoneGap App を使用した)で採用したことを知っておくと便利です。開発中にサーバーからHTML5ファイルを読み込むことができるアプリこれは、JS/CSS/HTMLファイルを変更する場合、ハイブリッドモバイルアプリの開発サイクルにおける遅いコンパイル/デプロイのステップをスキップできるので、とても巧妙なトリックです - また、ファイルの変更を検出する静的NodeJS Webサーバー(phonegap serve
を実行)も提供しています。
PhoneGap + Sencha Touch開発者
私は今、Sencha TouchとjQuery Mobileの開発者向けにPhoneGap静的サーバーとPhoneGap開発者アプリを広範囲に適応させました。 Sencha Touch Live で確認してください。デスクトップコンピュータからファイアウォールの外側のURLへの静的サーバーをプロキシする--qr QR Codesと--localtunnelをサポートしています。たくさんの用途に使用できます。
Cordova + Ionic Framework開発者
ローカルサーバーと自動更新機能はionic
ツールに組み込まれています。アプリフォルダからionic serve
を実行するだけです。さらに良い... ionic serve --lab
はiOSとAndroid両方の自動更新を並べて表示します。
この Gist をチェックしてください。参照用にここで再現していますが、要旨は定期的に更新されています。
Node.JS静的ファイルWebサーバー。任意のディレクトリのサーバを起動するためにあなたのパスにそれを入れて、オプションのport引数を取ります。
var http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs"),
port = process.argv[2] || 8888;
http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname
, filename = path.join(process.cwd(), uri);
fs.exists(filename, function(exists) {
if(!exists) {
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Not Found\n");
response.end();
return;
}
if (fs.statSync(filename).isDirectory()) filename += '/index.html';
fs.readFile(filename, "binary", function(err, file) {
if(err) {
response.writeHead(500, {"Content-Type": "text/plain"});
response.write(err + "\n");
response.end();
return;
}
response.writeHead(200);
response.write(file, "binary");
response.end();
});
});
}).listen(parseInt(port, 10));
console.log("Static file server running at\n => http://localhost:" + port + "/\nCTRL + C to shutdown");
更新
要旨は、cssファイルとjsファイルを処理します。私はそれを自分で使いました。 "バイナリ"モードで読み書きを使用しても問題ありません。これは、ファイルがファイルライブラリによってテキストとして解釈されず、応答で返されるcontent-typeとは無関係であることを意味します。
あなたのコードの問題はあなたが常に "text/plain"のコンテントタイプを返しているということです。上記のコードではコンテンツタイプは返されませんが、HTML、CSS、およびJSに使用しているだけの場合は、ブラウザでそれらを推測できます。 間違ったコンテンツタイプより優れたコンテンツタイプはありません。
通常、content-typeはあなたのWebサーバの設定です。それで、これでyour問題が解決しない場合は残念ですが、それは私にとって単純な開発サーバーとしてはたらいていて、それが他の人々を助けるかもしれないと思った。応答に正しいコンテンツタイプが必要な場合は、joeytwiddleが持つようにそれらを明示的に定義するか、またはConnectのように適切なデフォルト値を持つライブラリを使用する必要があります。これに関して素晴らしいことは、それが単純で自己完結型であるということです(依存関係はありません)。
しかし、私はあなたの問題を感じますか。それで、これが組み合わせた解決策です。
var http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs")
port = process.argv[2] || 8888;
http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname
, filename = path.join(process.cwd(), uri);
var contentTypesByExtension = {
'.html': "text/html",
'.css': "text/css",
'.js': "text/javascript"
};
fs.exists(filename, function(exists) {
if(!exists) {
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Not Found\n");
response.end();
return;
}
if (fs.statSync(filename).isDirectory()) filename += '/index.html';
fs.readFile(filename, "binary", function(err, file) {
if(err) {
response.writeHead(500, {"Content-Type": "text/plain"});
response.write(err + "\n");
response.end();
return;
}
var headers = {};
var contentType = contentTypesByExtension[path.extname(filename)];
if (contentType) headers["Content-Type"] = contentType;
response.writeHead(200, headers);
response.write(file, "binary");
response.end();
});
});
}).listen(parseInt(port, 10));
console.log("Static file server running at\n => http://localhost:" + port + "/\nCTRL + C to shutdown");
あなたは急行を必要としません。あなたは接続する必要はありません。 Node.jsはhttp NATIVELYを行います。あなたがする必要があるのは、要求に依存するファイルを返すことです:
var http = require('http')
var url = require('url')
var fs = require('fs')
http.createServer(function (request, response) {
var requestUrl = url.parse(request.url)
response.writeHead(200)
fs.createReadStream(requestUrl.pathname).pipe(response) // do NOT use fs's sync methods ANYWHERE on production (e.g readFileSync)
}).listen(9615)
リクエストがベースディレクトリの下のファイルにアクセスできないようにし、適切なエラー処理を行う、より完全な例です。
var http = require('http')
var url = require('url')
var fs = require('fs')
var path = require('path')
var baseDirectory = __dirname // or whatever base directory you want
var port = 9615
http.createServer(function (request, response) {
try {
var requestUrl = url.parse(request.url)
// need to use path.normalize so people can't access directories underneath baseDirectory
var fsPath = baseDirectory+path.normalize(requestUrl.pathname)
var fileStream = fs.createReadStream(fsPath)
fileStream.pipe(response)
fileStream.on('open', function() {
response.writeHead(200)
})
fileStream.on('error',function(e) {
response.writeHead(404) // assume the file doesn't exist
response.end()
})
} catch(e) {
response.writeHead(500)
response.end() // end the response so browsers don't hang
console.log(e.stack)
}
}).listen(port)
console.log("listening on port "+port)
私はあなたが今不足している部分はあなたが送信しているということです:
Content-Type: text/plain
WebブラウザにHTMLをレンダリングさせたい場合は、これを次のように変更する必要があります。
Content-Type: text/html
ステップ1(コマンドプロンプトの内側に[あなたのフォルダにcdしてください]):npm install express
ステップ2:ファイルserver.jsを作成する
var fs = require("fs");
var Host = "127.0.0.1";
var port = 1337;
var express = require("express");
var app = express();
app.use(express.static(__dirname + "/public")); //use static files in ROOT/public folder
app.get("/", function(request, response){ //root dir
response.send("Hello!!");
});
app.listen(port, Host);
注意してください、あなたもWATCHFILEを追加する(またはnodemonを使用する)べきです。上記のコードは単純な接続サーバー用です。
ステップ3:node server.js
またはnodemon server.js
あなたが単にHost simple HTTP serverが欲しいのなら、もっと簡単な方法があります。 npm install -g http-server
そして私たちのディレクトリを開いてhttp-server
をタイプしてください
早道:
var express = require('express');
var app = express();
app.use('/', express.static(__dirname + '/../public')); // ← adjust
app.listen(3000, function() { console.log('listening'); });
あなたのやり方で:
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
console.dir(req.url);
// will get you '/' or 'index.html' or 'css/styles.css' ...
// • you need to isolate extension
// • have a small mimetype lookup array/object
// • only there and then reading the file
// • delivering it after setting the right content type
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('ok');
}).listen(3001);
Switch文を処理するのではなく、辞書からコンテンツタイプを検索するのが適切だと思います。
var contentTypesByExtension = {
'html': "text/html",
'js': "text/javascript"
};
...
var contentType = contentTypesByExtension[fileExtension] || 'text/plain';
これは基本的にConnectバージョン3のための受け入れられた答えのアップデート版です:
var connect = require('connect');
var serveStatic = require('serve-static');
var app = connect();
app.use(serveStatic(__dirname, {'index': ['index.html']}));
app.listen(3000);
また、index.htmlがデフォルトとして機能するように、デフォルトオプションも追加しました。
単純なサーバーを実行するためにNPMモジュールを使用する必要はありません。Node用に " NPM Free Server "という非常に小さなライブラリがあります。
50行のコードで、ファイルまたはフォルダを要求している場合に出力され、正常に機能しなかった場合は赤色または緑色になります。サイズが1KB未満(縮小)。
もしあなたがあなたのPCにノードをインストールしていればおそらくあなたはNPMを持っています、もしあなたがNodeJSのものを必要としていなければ、あなたはこれのために serve パッケージを使うことができます:
1 - PCにパッケージをインストールします。
npm install -g serve
2 - あなたの静的フォルダを提供します:
serve <path>
d:> serve d:\StaticSite
静的フォルダが提供されているポートを表示します。ホストに移動するだけです。
http://localhost:3000
私はnpmにあなたにとって役に立つかもしれない興味深いライブラリを見つけました。これはmime(npm install mime
または https://github.com/broofa/node-mime )と呼ばれ、ファイルのMIMEタイプを判断できます。これが私が書いたウェブサーバーの例です。
var mime = require("mime"),http = require("http"),fs = require("fs");
http.createServer(function (req, resp) {
path = unescape(__dirname + req.url)
var code = 200
if(fs.existsSync(path)) {
if(fs.lstatSync(path).isDirectory()) {
if(fs.existsSync(path+"index.html")) {
path += "index.html"
} else {
code = 403
resp.writeHead(code, {"Content-Type": "text/plain"});
resp.end(code+" "+http.STATUS_CODES[code]+" "+req.url);
}
}
resp.writeHead(code, {"Content-Type": mime.lookup(path)})
fs.readFile(path, function (e, r) {
resp.end(r);
})
} else {
code = 404
resp.writeHead(code, {"Content-Type":"text/plain"});
resp.end(code+" "+http.STATUS_CODES[code]+" "+req.url);
}
console.log("GET "+code+" "+http.STATUS_CODES[code]+" "+req.url)
}).listen(9000,"localhost");
console.log("Listening at http://localhost:9000")
これは通常のテキストまたは画像ファイルを提供します(.html、.css、.js、.pdf、.jpg、.png、.m4a、および.mp3は私がテストした拡張子ですが、理論上はすべてうまくいくはずです)
これが私が得た出力の例です。
Listening at http://localhost:9000
GET 200 OK /cloud
GET 404 Not Found /cloud/favicon.ico
GET 200 OK /cloud/icon.png
GET 200 OK /
GET 200 OK /501.png
GET 200 OK /cloud/manifest.json
GET 200 OK /config.log
GET 200 OK /export1.png
GET 200 OK /Chrome3DGlasses.pdf
GET 200 OK /cloud
GET 200 OK /-1
GET 200 OK /Delta-Vs_for_inner_Solar_System.svg
パス構成のunescape
関数に注目してください。これは、スペースとエンコードされた文字を含むファイル名を許可するためです。
私のやり方は、まず最初に静的ノードをグローバルにインストールすることです。
npm install node-static -g
次に、htmlファイルが含まれているディレクトリに移動し、static
を指定して静的サーバーを起動します。
ブラウザに移動してlocalhost:8080/"yourHtmlFile"
と入力します。
Node.jsサンプルアプリ ノードチャット あなたが望む機能を持っています。
その中に README.textfile
3。ステップはあなたが探しているものです。
ステップ1
- ポート8002でhello worldと応答するサーバーを作成します
ステップ2
- index.htmlを作成して提供する
step3
- util.jsを紹介する
- 静的ファイルが提供されるようにロジックを変更します。
- ファイルが見つからない場合は404を表示
ステップ4
- jquery-1.4.2.jsを追加します。
- client.jsを追加する
- index.htmlをニックネームのプロンプト・ユーザーに変更します
これは server.js です。
これは util.js です。
基本的には受け入れられた答えをコピーしますが、jsファイルを作成することは避けます。
$ node
> var connect = require('connect'); connect().use(static('.')).listen(8000);
それは非常に説得力があるとわかりました。
Expressの最新バージョンでは、serv-staticは別のミドルウェアになりました。これを使用して提供します。
require('http').createServer(require('serve-static')('.')).listen(3000)
最初にserve-static
をインストールしてください。
var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
// change the to 'text/plain' to 'text/html' it will work as your index page
res.end(index);
}).listen(9615);
私はあなたがこれを探していると思います。あなたのindex.htmlの中で、通常のhtmlコードでそれを単に塗りつぶします - あなたがそれにレンダリングしたいものは何でも、
<html>
<h1>Hello world</h1>
</html>
これがまさにあなたが望んだものかどうかはわかりませんが、変更してみることができます。
{'Content-Type': 'text/plain'}
これに:
{'Content-Type': 'text/html'}
これにより、ブラウザクライアントはファイルをプレーンテキストではなくHTMLとして表示します。
URLにファイルが記載されていない場合は、デフォルトのHTMLファイルをレンダリングする単純なWebサーバーを起動するために、以下のコードを使用します。
var http = require('http'),
fs = require('fs'),
url = require('url'),
rootFolder = '/views/',
defaultFileName = '/views/5 Tips on improving Programming Logic Geek Files.htm';
http.createServer(function(req, res){
var fileName = url.parse(req.url).pathname;
// If no file name in Url, use default file name
fileName = (fileName == "/") ? defaultFileName : rootFolder + fileName;
fs.readFile(__dirname + decodeURIComponent(fileName), 'binary',function(err, content){
if (content != null && content != '' ){
res.writeHead(200,{'Content-Length':content.length});
res.write(content);
}
res.end();
});
}).listen(8800);
すべてのHTMLコンテンツとともに、すべてのjs、css、および画像ファイルをレンダリングします。
「 間違ったものより優れたコンテンツタイプはありません 」
もう少し冗長な4.xバージョンですが、ディレクトリの一覧表示、圧縮、キャッシング、および最小限の行数での要求ロギングを提供します。
var express = require('express');
var compress = require('compression');
var directory = require('serve-index');
var morgan = require('morgan'); //logging for express
var app = express();
var oneDay = 86400000;
app.use(compress());
app.use(morgan());
app.use(express.static('filesdir', { maxAge: oneDay }));
app.use(directory('filesdir', {'icons': true}))
app.listen(process.env.PORT || 8000);
console.log("Ready To serve files !")
ここでは狂った量の複雑な答えが出ています。 nodeJSファイル/データベースを処理するのではなく、静的html/css/js/imagesを提供したいだけの場合は、 pushstate-server モジュールなどをインストールします。
これは、ミニサイトを作成して起動する「ワンライナー」です。ブロック全体を端末の適切なディレクトリに貼り付けるだけです。
mkdir mysite; \
cd mysite; \
npm install pushstate-server --save; \
mkdir app; \
touch app/index.html; \
echo '<h1>Hello World</h1>' > app/index.html; \
touch server.js; \
echo "var server = require('pushstate-server');server.start({ port: 3000, directory: './app' });" > server.js; \
node server.js
ブラウザを開き、 http:// localhost:3000 にアクセスします。完了しました。
サーバーは、ファイルを提供するルートとしてapp
ディレクトリを使用します。追加のアセットを追加するには、それらをそのディレクトリの中に置くだけです。
上記の答えのほとんどは、コンテンツがどのように提供されているかについて非常にうまく説明しています。私が追加で探していたのは、ディレクトリの他のコンテンツを閲覧できるようにディレクトリのリストを表示することでした。これが、さらなる読者のための私の解決策です。
'use strict';
var finalhandler = require('finalhandler');
var http = require('http');
var serveIndex = require('serve-index');
var serveStatic = require('serve-static');
var appRootDir = require('app-root-dir').get();
var log = require(appRootDir + '/log/bunyan.js');
var PORT = process.env.port || 8097;
// Serve directory indexes for reports folder (with icons)
var index = serveIndex('reports/', {'icons': true});
// Serve up files under the folder
var serve = serveStatic('reports/');
// Create server
var server = http.createServer(function onRequest(req, res){
var done = finalhandler(req, res);
serve(req, res, function onNext(err) {
if (err)
return done(err);
index(req, res, done);
})
});
server.listen(PORT, log.info('Server listening on: ', PORT));
w3schoolsより
要求されたファイルを提供するためにノードサーバーを作成するのは非常に簡単です、そしてそれのためにパッケージをインストールする必要はありません
var http = require('http');
var url = require('url');
var fs = require('fs');
http.createServer(function (req, res) {
var q = url.parse(req.url, true);
var filename = "." + q.pathname;
fs.readFile(filename, function(err, data) {
if (err) {
res.writeHead(404, {'Content-Type': 'text/html'});
return res.end("404 Not Found");
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end();
});
}).listen(8080);
http:// localhost:8080/file.html
ディスクからfile.htmlを提供します
var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'html'});
res.end(index);
}).listen(9615);
//Just Change The CONTENT TYPE to 'html'
単純なnodejs server
には、すでにいくつかの優れた解決策があります。ファイルを変更したときにlive-reloading
が必要な場合は、もう1つ解決策があります。
npm install lite-server -g
あなたのディレクトリをナビゲートして行う
lite-server
ライブリロードでブラウザが開きます。
これは、Webページをすばやく表示するために使用する最も速いソリューションの1つです。
Sudo npm install ripple-emulator -g
それから、ちょうどあなたのhtmlファイルのディレクトリを入力して実行してください
ripple emulate
次に、デバイスをNexus 7のランドスケープに変更します。
私はSugoiJSを推薦することもできます、それはセットアップするのがとても簡単で、速く書き始めるオプションを与え、そして素晴らしい機能を持っています。
始めるためにここを見てください: http://demo.sugoijs.com/ 、ドキュメント: https://wiki.sugoijs.com/
リクエスト処理デコレータ、リクエストポリシー、認可ポリシーデコレータがあります。
例えば:
import {Controller,Response,HttpGet,RequestParam} from "@sugoi/server";
@Controller('/dashboard')
export class CoreController{
constructor(){}
@HttpGet("/:role")
test(@RequestParam('role') role:string,
@RequestHeader("role") headerRole:string){
if(role === headerRole )
return "authorized";
else{
throw new Error("unauthorized")
}
}
}
今日のたくさんの図書館のプレゼントでとても簡単です。ここでの答えは機能的です。より早く簡単に他のバージョンを起動したい場合
もちろん最初にnode.jsをインストールしてください。後:
> # module with zero dependencies
> npm install -g @kawix/core@latest
> # change /path/to/static with your folder or empty for current
> kwcore "https://raw.githubusercontent.com/voxsoftware/kawix-core/master/example/npmrequire/express-static.js" /path/to/static
ここに " https://raw.githubusercontent.com/voxsoftware/kawix-core/master/example/npmrequire/express-static.js "の内容があります(ダウンロードする必要はありません。どのように動作します)
// you can use like this:
// kwcore "https://raw.githubusercontent.com/voxsoftware/kawix-core/master/example/npmrequire/express.js" /path/to/static
// kwcore "https://raw.githubusercontent.com/voxsoftware/kawix-core/master/example/npmrequire/express.js"
// this will download the npm module and make a local cache
import express from 'npm://express@^4.16.4'
import Path from 'path'
var folder= process.argv[2] || "."
folder= Path.resolve(process.cwd(), folder)
console.log("Using folder as public: " + folder)
var app = express()
app.use(express.static(folder))
app.listen(8181)
console.log("Listening on 8181")
local-web-server は一見の価値があります! readmeからの抜粋を次に示します。
迅速なフルスタック開発のための無駄のないモジュラーWebサーバー。
このツールを使用して:
Local-web-serverは、便利なミドルウェアの「スターターパック」にバンドルされている lws のディストリビューションです。
このパッケージは、ws
コマンドラインツールをインストールします( 使用ガイド をご覧ください)。
引数なしでws
を実行すると、現在のディレクトリが静的なWebサイトとしてホストされます。サーバーに移動すると、ディレクトリリストまたはindex.html
が表示されます(そのファイルが存在する場合)。
$ ws
Listening on http://mbp.local:8000, http://127.0.0.1:8000, http://192.168.0.100:8000
このクリップは、静的ホスティングといくつかのログ出力形式-dev
およびstats
を示しています。
シングルページアプリケーション(クライアント側ルーティングを備えたアプリ、たとえばReactまたはAngularアプリ)の提供は、シングルページの名前を指定するのと同じくらい簡単です。
$ ws --spa index.html
静的サイトでは、一般的なSPAパス(例:/user/1
、/login
)のリクエストは、その場所にファイルが存在しないため404 Not Found
を返します。ただし、index.html
をSPAとしてマークすることにより、このルールを作成します。
静的ファイルが要求された場合(例:/css/style.css
)、提供されない場合(例:/login
)、指定されたSPAを提供し、クライアント側のルートを処理します。
別の一般的な使用例は、特定の要求をリモートサーバーに転送することです。
次のコマンドは、/posts/
で始まるパスからhttps://jsonplaceholder.typicode.com/posts/
へのブログ投稿要求をプロキシします。たとえば、/posts/1
のリクエストはhttps://jsonplaceholder.typicode.com/posts/1
にプロキシされます。
$ ws --rewrite '/posts/(.*) -> https://jsonplaceholder.typicode.com/posts/$1'
このクリップでは、上記に加えて、--static.extensions
を使用してデフォルトのファイル拡張子を指定し、--verbose
を使用してアクティビティを監視します。
HTTPSまたはHTTP2の場合、--https
または--http2
フラグをそれぞれ渡します。 wikiを参照 さらなる設定オプションとブラウザで「緑の南京錠」を取得する方法のガイド。
$ lws --http2
Listening at https://mba4.local:8000, https://127.0.0.1:8000, https://192.168.0.200:8000
私が遭遇した簡単なバージョンは以下の通りです。それは抽象ライブラリを使用しないので、教育目的のために、それは最善です。
var http = require('http'),
url = require('url'),
path = require('path'),
fs = require('fs');
var mimeTypes = {
"html": "text/html",
"mp3":"audio/mpeg",
"mp4":"video/mp4",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"png": "image/png",
"js": "text/javascript",
"css": "text/css"};
http.createServer(function(req, res) {
var uri = url.parse(req.url).pathname;
var filename = path.join(process.cwd(), uri);
fs.exists(filename, function(exists) {
if(!exists) {
console.log("not exists: " + filename);
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('404 Not Found\n');
res.end();
return;
}
var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
res.writeHead(200, {'Content-Type':mimeType});
var fileStream = fs.createReadStream(filename);
fileStream.pipe(res);
}); //end path.exists
}).listen(1337);
ブラウザに行き、以下を開きます。
http://127.0.0.1/image.jpg
ここでimage.jpg
はこのファイルと同じディレクトリになければなりません。これが誰かに役立つことを願っています:)