私は最初のNode.js MVCアプリケーション(Expressを使用していないネイティブノード)を構築しており、相対パスを使ってHTMLファイルから画像を表示するのに問題があります。Node.jsの相対パスで画像を表示
私はここにあなたに私のserver.jsとrouter.jsコードを惜しま、しかしますが、基本的にはどのようにイムロード私の意見である私のコントローラのコードです:これは渡さ
var fs = require("fs");
var controller = require("controller");
var load_view = 'view_home';
var context = { foo : 'bar' };
controller.load_view(res, req, fs, load_view, context);
に...
var url = require('url');
var Handlebars = require('handlebars');
function load_view(res, req, fs, view, context, session){
// Files to be loaded, in order
var files = [
'view/elements/head.html',
'view/elements/header.html',
'view/' + view +'.html',
'view/elements/footer.html'
];
// Start read requests, each with a callback that has an extra
// argument bound to it so it will be unshifted onto the callback's
// parameter list
for(var i=0; i<files.length; ++i)
fs.readFile(files[i], handler.bind(null, i));
var count = 0;
function handler(index, err, content) {
// Make sure we don't send more than one response on error
if(count < 0) return;
if(err) {
count = -1;
console.log('Error for file: ' + files[index]);
console.log(err);
res.writeHead(500);
return res.end();
}
// Reuse our `files` array by simply replacing filenames with
// their respective content
files[index] = content;
// Check if we've read all the files and write them in order if
// we are finished
if(++count===files.length) {
res.writeHead(200, { 'Content-Type': 'text/html' });
for(var i = 0; i < files.length; ++i) {
var source = files[i].toString('utf8');
// Handlebars
var template = Handlebars.compile(source);
var html = template(context);
res.write(html); /* WRITE THE VIEW (FINALLY) */
}
res.end();
}
} // handler()
} // load()
は最後に、ここではsrc属性でタグと相対パスと私のhtmlです:
<div class="help">
<img src="../public/img/test.jpg" />
</div>
マイFiの上記のようなファイルシステムは次のようになります:
相対パスが正しいと確信していますが、相対パスと絶対パスのすべての組み合わせを試しています。それでも、画像は表示されません。
LAMPの背景から来て、ファイルツリーの画像にアクセスするのは簡単ですが、私はそれが設定されていたので、ここではサーバの設定がはるかに異なっていることに気付きました。
ファイルシステム内の他のファイル(スタイルシートなど)にアクセスするには、ファイルを明示的にロードし、URIを使用してそのコントローラにアクセスする別のコントローラを作成します。しかし、この方法は不確定な数の画像に対しては実用的ではない。
&にアクセスするには、Node.jsを使用して画像をファイルシステムに表示するにはどうすればよいですか?
node.jsはデフォルトでNOファイルを提供し、ファイルシステムは何もないことを理解していますか?そのため、ファイルシステムから提供されるすべてのイメージについて、httpサーバーのルートハンドラが適用されていることを確認する必要があります。静的ファイルとExpressのようなフレームワークを使用する場合、典型的に 'express.static()'を使用して、ハードドライブ上の特定のサブディレクトリ階層に特定のパス接頭辞を持つファイルを探すようにexpressに指示します。 – jfriend00
そして、通常は相対パスを使用することは望ましくありません。なぜなら、それらのページのURLを基準にしているため、物事を単純化するよりも複雑なことが多いからです。より一般的には、 '/ public/img/test 'のようなものを使います。jpg'を使用していて、 '/ public'の接頭辞があるルートハンドラを使用して、特定のサブディレクトリ階層の残りのパスを探します。 – jfriend00
そして、あなたがあなたの質問に表示するコードの多くは、エクスプレスとハンドルバーが持っている組み込みサポートを使用すると消えてしまいます。 – jfriend00