2012-03-21 9 views
3

私は何がここで間違っているのか分かりません。express.jsは私のイメージを提供していません

ディレクトリ構造:

app/server.js 
app/public/index.html 
app/public/js/main.js 
app/public/img/car.png 

server.js

var fs = require('fs') ,express = require('express'), 
app = express.createServer(); 

app.use(express.static(__dirname + "/public")); 

app.get('/', function(req, res){ 
    fs.readFile(__dirname + '/public/index.html', 'utf8', function(err, text){ 
     res.send(text); 
    }); 
}); 

app.listen(8080, function(){ 
    console.log('Server listening on %d', app.address().port); 
}); 

main.js

var marker = new google.maps.Marker({ 
     map:map, 
     position:coords, 
     icon: 'img/car.png' 
    }); 

ERROROUTPUT:

Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/img/car.png 

すべてのcssファイルとjsファイルが問題なく読み込まれます。 私は何が間違っていますか?

UPDATE これは私が名前が本当に学んだ レッスンをcar.pngた考えにだまされたウィンドウで閲覧した場合、fileextensionsは見えなかったcar.png.png 命名されたファイルが原因でした!この

app.use('/public', express.static(__dirname + "/public")); 
+0

を/img/car.pngローカルでこれをテストしていますか? StackOverflowの同様の質問を一見すると、いくつかのクラウドプロバイダーが混乱している可能性があります。http://stackoverflow.com/questions/7506797/static-image-file-is-invisible-in-node-js-express –

+0

はい、同じ結果を持つローカルとノードテストでテストされました。 –

+0

@DavidEllis:異なる症状があります(404ではありません)。 –

答えて

12

変更このライン

app.use(express.static(__dirname + "/public")); 

は、絶対パスを使用してみてください -

+2

要求の応答に同期機能を使用しないでください。これらは、アプリのセットアップ時にのみ使用する必要があります。代わりに 'fs.createReadStream(file).pipe(res)'を使用してください。 – fent

+0

@DeaDEnDこれは問題ありません。私はこの問題を発見する前に、文字通り同じ問題をMINUTESで解決したからです。 kthnxbi –

+0

@runexec: 'fs.readFileSync'の推奨が悪いので、私はあなたを落胆させました。そして、いいえ、それはOPの解決策ではありませんでした - ファイルは 'car.png.png'という名前でした。 –

関連する問題