6

私はtp get phantomjs webserver worksを試しています

html ファイルと png 画像ファイルの 2 つのファイルを提供したいのですが、html ファイルは適切に提供され、ブラウザーで正しくレンダリングされますが、png ファイルは提供されません。

ここにサーバーのコードがあります

var fs = require('fs');
function loadFile(name){
if(fs.exists(name)){
    console.log(name+ " File  exist");
    return fs.open(name,"r");
}else {
    console.log("File do not exist");
}
}
var server, service;

server = require('webserver').create();

service = server.listen(8080, function (request, response) {    

if(request.url.split(".")[1] === "html" ){
    var fi = loadFile("./test.html");
    response.statusCode = 200;
    response.write(fi.read());
    fi.close();
    response.close();
}else if (request.url.split(".")[1] === "png"){
    var fi = loadFile("./output_87.png");
    response.headers = {"Content-Type":"image/png"};
    response.statusCode = 200;
    response.write(fi.read());
    fi.close();
    response.close();
}
});

これはhtmlファイルのマークアップです

<html>
<head><title>title</title></head>
<body><h1> Hello world </h1>
    <img src="output_87.png" alt="image">
</body>
</html>

このファイルをブラウザで表示するとpngファイルがレンダリングされず、ブラウザでpngファイルを指定しようとしてもレンダリングされません

Chrome 開発者ツールでネットワーク ステータスを確認したところ、ブラウザによってファイルが完全にダウンロードされていることが確認されました

なにが問題ですか?

ところで、phantomjs を使用する必要があります。別のサーバーを使用するように言わないでください

ありがとう

ジョー

4

3 に答える 3

2

PNGファイルを読んでいる場合、 fs.open() 呼び出しはバイナリ読み取りモードに「rb」を使用する必要があると思います。モード "r" はテキストであるため html で機能しますが、PNG ファイルを読み取ってブラウザーに提供しますが、画像データはレンダリングできません。

于 2013-10-26T05:55:00.230 に答える
-2

非同期関数を同期のように使用しようとしています。使用しているすべてのファイルシステム関数 ( exists()open()、およびread()) は非同期であり、目的の結果でコールバック (提供していない) を呼び出そうとします。彼らはそれをしませんreturn。これらの関数の同期バージョンを使用するか、(はるかに良い) 非同期 I/O の使用方法を学習してください。

于 2012-06-20T14:13:07.753 に答える