2016-05-02 5 views
1

私はhttpdispatcherを使用しており、静止画像を提供したいと考えています。私は、/フォルダーをアプリケーションフォルダに持っています。以下のコードがあります。私は画像を取得するためにhttp://localhost:3000/resources/abc.jpgを試しましたが、何の応答も得られませんでした。何か案が?Nodejsはhttpdispatcherで静止画像を配信します

var http = require('http'); 
var dispatcher = require('httpdispatcher'); 

var express = require('express'); 
var app = express(); 
dispatcher.setStatic('resources'); 
dispatcher.setStaticDirname('.'); 

const PORT=3000; 

function handleRequest(request, response){ 
     try { 
     console.log(request.url); 
     dispatcher.dispatch(request, response); 
    } catch(err) { 
     console.log(err); 
    } 
} 


dispatcher.onGet("/page1", function(req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    var response={"res":'Page One id: ' + req.params.id}; 
    res.end(JSON.stringify(response)); 
});  


dispatcher.onPost("/post1", function(req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    var response={"res":'Got Post Data appId: '+JSON.parse(req.body).appId}; 
    res.end(JSON.stringify(response)); 
}); 

    dispatcher.onError(function(req, res) { 
     res.writeHead(404); 
     res.end("NOT FOUND"); 
    }); 



var server = http.createServer(handleRequest); 


server.listen(PORT, function(){ 
    console.log("Server listening on: http://localhost:%s", PORT); 
}); 
+0

サーバーを作成しましたか?ディスパッチャを設定することはできますが、 'http.createServer'と' listen'を使ってサーバを作成し、それをポートにバインドする必要があります。 [README'](https://github.com/alberto-bottarini/httpdispatcher/blob/master/README.md)を参照してください(最後に) –

+0

Yepp私はサーバーを作成し、取得リクエストと投稿リクエストから応答を得ました画像リクエストからの応答を得られない@BrandonAnzaldi – nikinci

+2

@nikinciサーバに経路を表示してもよろしいですか? –

答えて

2

httpdispatcherの現在の静的な資産の実装はいくつかの理由のために壊れている、答えに私のコメントを仕事に。

  1. 不適切なパス解析。 (.は正しく処理されず、コード内で正しく結合されていません)違反行:var filename = "." + require('path').join(this.staticDirname, url.pathname);

  2. チェックするパス名から指定したリソースURLを除外しません。つまり、.を静的ディレクトリとして指定しても、URLハンドラとしてresourcesを指定しても、静的ディレクトリ構造にはresourcesフォルダが含まれている必要があります。または、URLには..が含まれている必要があります。

現在、動作しますが、それはモジュールの作者にこれらの欠陥を報告する価値があるあなたのユースケースのためのより良いパッケージは、おそらくあります。編集:すでにpath traversal vulnerabilitydirectory resolutionの問題があるようです。

現時点では、HTTP Serverハンドラでの照合によって手動でルーティングを処理することも、別のライブラリを使用することもできます。

など、 diet-staticDietExpress、いくつかのEDITに名前を付けるには: this issueに述べたように、これらの問題が 1.1.0のように解決された可能性があると表示されます。

+2

ありがとう@Brandon私はExpressを使用することにした – nikinci

+0

@nikinciを助けるために嬉しい:) –

関連する問題