ApacheはNode.jsのパロディを使用して

Gitのリポジトリ:https://github.com/mandongpiaoxue/apache

オリジナルの記事は、ソースを明記してください

ファイルの説明:

config.json          // プロファイル 
images.js             // SVG画像導入 
server.js              // サーバがファイル 
run.batを              // 起動ファイル内のウィンドウを、サービスをすぐに開始するためにダブルクリックします

1. config.jsonの設定ファイル

{
     " インデックス"" インデックス"// ホーム名は
    " 拒否":{               // IPへのアクセスの拒否
        " IPS " :[
             " 192.168.0.10 " 
        ] 
    }、
    " ホスト" :[ 
        { 
            " ホスト"" 127.0。 0.1 " // ドメイン名の設定
            " DIR "" D:WWW /を          // 構成パス
        }、
        { 
            " ホスト"" www.man.cn " " DIR "" D:/ WWW " 
        } 
    ] 
}        

 2. run.batファイルのコード

@cd / D%〜DP0 
@echoのNode.jsサーバが正常に起動し
server.js @node

3. server.jsファイルのコードと説明

3.1モジュールとファイルを紹介します

//注入モジュール
のconstが必要とHTTP( 'HTTP' = のconst URLを =必要( 'URL' のconst FSは( 'FS'必要= のconstパス =( 'パス'が必要です constのイメージ =(必要」./イメージを)//画像導入
変数定義//
するvar = configと[] VAR IPS = [] VaRのインデックス= '' //設定ファイル読み込み fs.readFile(path.join(__ DIRNAME、 'ERR(config.json')を、データ)=> { 設定 = JSON.parse(data.toString()) IPS = config.deny.ips インデックス =
コンフィグ。指数 })

3.2のReadFileライト機能:私たちの約束の使用を容易にするために、簡潔なコードを書きます

関数readFileの(ファイル){
     戻り 、新たな約束((決意、リジェクト)=> { 
        fs.readFile(ファイル、(誤り、データ) => {
             場合(エラー){ 
                拒否(エラー)
            } { 
                解決(データ)
            } 
        } )
    })
}

3.3サーバーのコードとNotes

HTTP 
    .createServer(関数(REQ、RES){
         / * プレゼントリモートIP * / 
        remoteipせ(= req.socket.remoteAddress.substrを。7 / * シールド指定IP * / 
        ips.forEach(IP => {
             IF(IP = remoteip ==)res.end( '404ファイルがNO発見!' 
        })
        / * ホストを取得し、すなわちドメイン名* / 
        LETホスト = req.headers.host
         / * 非アクセスによるポート80は、あるでしょう場合はプロトコル、またはnullである* / 
        LETプロトコル = url.parse(ホスト).protocol
         IFは、(プロトコル)ホストprotocol.slice =(0、-1 / * URLをフォーマットする* / 
        LET urlObject = url.parse(req.url、真の/ * パス名を取得します* / 
        LETのパス名 = urlObject.pathnameの
        パス名 = は、decodeURIComponent (パス名)
         / * 接尾辞を取得します* / 
        LETのEXT = path.parse(パス名).EXT
         / * 対応するアクセスドメイン設定を探す* / 
        LETサーバー = config.hosts.find((V、I)=> {
             返す === v.host ホストを
        })
        / * 読み出しパスマッチング* / 
        IF(!Server.dir)res.end( 'ドメインはへのパスではありません!' 
        Fs.readdir(server.dir、(誤り、データ) => {
             IF(エラー)RES。端(「エラーパスドメイン名に」
        })
        スイッチ(EXT){
             / * の.htm .htmファイルヘッダおよび部分がHTMLまたはHTMファイルを理解しない防ぐために配置* / 
            ケース「の.htmlを」
                res.setHeader( 'タイプコンテンツ''テキスト/ HTML; = UTF-chartset 8 ' BREAK 
            ケース 'の.htm ' 
                res.setHeader( ' Content-Typeの''テキスト/ HTML; = UTF-chartset 8 '。休憩
            ケース '.TXT' 
                res.setHeader( 'Content-Typeの'、 'text / plainで、chartset = UTF-8' ブレーク
            ケース 'の.css' 
                res.setHeader( 'Content-Typeの'、'テキスト/ cssの。 chartset = UTF-8' ブレーク
            ケース 'の.doc' 
                res.setHeader( 'コンテンツタイプ'、 'アプリケーション/ mswordは、chartset = UTF-8' ブレーク
        } 
        DIRせ = サーバー。DIR 
        filePathには聞かせ DIR + = パス名を
         * / URLを形成したフォルダ/ディレクトリに読ん* /
        fs.readdir(filePathに、(ED、DD) => {
             IF (ED){
                 / * ファイルへの直接アクセス* / 
                readFileの(filePathに + '' 
                    .then(D1 => { 
                        res.end(D1)
                    }、E1 => { 
                        res.setHeader( 'のContent-Type'、 'テキスト/ HTML; = UTF-chartset 8' / * 省略の.htmの形式で文書を読む* / 
                        戻り readFileのを(filePathに+ 'の.htm' 
                    })
                    .then(D2 => {
                        res.end(D2)
                    }、E2 => {
                         / * 省略形の.htmlのファイルに読み込ま* / 
                        戻り readFileの(filePathに+ 'の.html' 
                    })
                    .then(D3 => { 
                        res.end(D3)
                    }、E3 => { 
                        (res.endが '404ファイルNOを発見!' 
                    })
            } {
                 / * HTMLファイルの読み出しタイプで、設定するレスポンスヘッダ'テキスト/ HTMLを; = UTF-chartset 8' * / 
                res.setHeader('Content-Typeの'、 'テキスト/ HTML; = UTF-chartset 8' / * index.htmlファイルのディレクトリを読み込む* / 
                readFileの(filePathに + '/' +インデックス+ '.htmlを' 
                    .then(D1 => { 
                        res.end(D1)
                    }、E1 => {
                         / * index.htmファイルディレクトリ読み取る* / 
                        戻り readFileの(filePathに+ '/' +指数+ 'の.htm' 
                    })
                    .then(D2 => { 
                        res.end(D2)
                    }、E2 =>{
                         / * 読み取りインデックスファイルディレクトリ* / 
                        戻り readFileの(filePathに+ '/' + インデックス)
                    })
                    .then(D3 => { 
                        res.end(D3)
                    }、E3 => {
                         / * ないインデックスファイルの場合ファイル、ディレクトリが読み込まれる* / 
                        聞かせてPNAは = pathname.split( '/' 
                        pna.pop()
                        LET名 = pna.pop()
                        LET PN = pathname.slice(0、-1 
                        させPNL= pn.lastIndexOf( '/' 
                        しましょうupPath = pathname.slice(0、PNL + 1 
                        DSましょう = `
                             <メタ文字コード= "UTF-8"> 
                            <タイトル> $ {名前} </ TITLE> 
                            <スタイル> 
                                本体{パディング:20ピクセルは50px;}
                             </スタイル> 
                            <スタイル= "表示:ブロック;高さ:32PX;" </a>のHREF = "$ {upPath}"> $ {} images.back                         ` 
                        dd.forEach(ファイル > = {
                             場合(file.search( '\\\。

                                DS + = `<スタイル= "表示:ブロック;高さ:32PX;" HREF = "$ {パス名+ファイル}"> <スパンスタイル= "高さ:32PX;行の高さ:32PX;フロート:左;表示:ブロック;"> $ {images.file} </スパン> <スパンスタイル= "高さ:32PX;行の高さ:32PX;フロート:左;表示:ブロック;"> $ {ファイル} </スパン> </a>の` 
                            } { 
                                DS + = '<スタイル="表示:ブロック;高さ:32PX;」HREF = "$ {パス名+ファイル+ '/'}"> <スパンスタイル= "高さ:32PX;行の高さ:32PX;フロート:左;表示:ブロック;"> $ {images.folder} </スパン> <スパンスタイル= "高さ:32PX;行の高さ:32PX;フロート:左;表示:ブロック;"> $ {ファイル} </スパン>する</a>

                    })
            } 
        })
    })
    .listen( 80、関数(ERR){
         場合(ERR)はconsole.log(ERR)
    })

 図4.効果

おすすめ

転載: www.cnblogs.com/mandongpiaoxue/p/11619020.html