2016-10-26 8 views
0

BuckyのThe New Bostonのチュートリアルに続いて、単純な静的インデックスページを実行しているHTMLファイルに画像が表示されるようです。 jsnode.js内容がHTMLの単純なHTTPサーバーで画像が表示されない

ご注意:これは学校プロジェクトです。私は未だに到達していない急行や接続などのミドルウェアを使用せずにこれを行うことが任されています。 :D

var http = require('http'); 
var fs = require('fs'); 
var accessTime = new Date(); 
var accessCount = 0; 


function send404Response(response) { 
    response.writeHead(404, {"Content-Type": "text/plain"}); 
    response.write("Error 404: Page not found!"); 
    response.end(); 
} 


function onRequest(request, response) { 

    if (request.method == 'GET' && request.url == '/'){ 

     response.writeHead(200, {"Content-Type": "text/html"}); 
     fs.createReadStream("./index.html").pipe(response); 

     fs.writeFileSync("logfile.txt", "\n Someone has accessed the index page \n" + accessTime + "\n ", "UTF-8",{'flags': 'a'}); 
     console.log("A user made a request"); 

     accessCount += 1; 
     console.log(accessCount + " page requests so far . . ."); 


    }else { 
     send404Response(response); 
    } 

} 

http.createServer(onRequest).listen(8888); 
console.log("Server is running..."); 

私はそれを実行すると、ローカルホストとして罰金htmlページがロード:私は外部の画像を使用しない限り、8888しかし、誰の画像が表示されます。例えば、htmlは標準のイメージタグを持つだけでしょうか?

<img src='photo.jpg' .... /> // doesnt work 
<img src='http://www.AWebSite.com/photo.jpg' .... /> // naturally works 

ありがとう!!

+0

あなたの 'onRequest'関数をもう一度見て、リクエストがどのように見えるかを例えば以下のように調べます。 'console.log(リクエスト)'をしています。いくつかのリクエストがあり、 'if文 'を満たすのは1人だけです... –

答えて

0

現在、画像のコードパスを提供していません。最初のコードブロックは 'http://localhost:8888/'に応答します。誰かがそれを要求した場合、あなたは「http://localhost:8888/index.html」を提供しないでしょう。

すべての静的コンテンツを配信する場合は、いくつかの方法があります。ほとんどのWebサーバーのようにするには、静的アセットを持つ既知のフォルダ(例:./public)を用意することから始めましょう。それでは、request.urlとし、公道の下でfs.stat()を使って調べてみてください。その場所にそのパスが存在する場合は、ファイル拡張子をチェックしてContent-Typeヘッダーを調べ、今のように配信します。そうでない場合は、現在行っているように404を返します。

サードパーティのライブラリをまったく使用できない場合は、各論理ビットを自分の必要とするファイルにチャンクすることをおすすめします。サードパーティ製のライブラリ(ミドルウェアではない)を使用できるのであれば、ファイル処理のワークフローを少し助け、コールバック・ヘルを避けるためにasync.jsを調べるといいでしょう。

+1

あなたの素晴らしい答えをありがとう。私はあなたの提案の一部に基づいてそれを解決することができました。リクエストメソッドがimages/jpgでイメージを提供している場合、私は別のメソッドを使いました。これは、本番システムの場合と同じですが、要件を満たしているため、最も適切な方法ではありません。私は彼が、私たちのために、各アイテムが要求をチェックされてから返答されなければならないことを理解することを望んでいたと信じています。乾杯! – loganpixel

+0

喜んで助けてください!クラスの残りの部分と幸運 – Paul

関連する問題