2017-03-13 13 views
0

私のリアクションアプリケーションをサーバーにレンダリングしていますが、画像を取得しようとしたときに404が見つかりません。画像のディレクトリに移動しようとすると、404が表示されます。なぜですか? 404 localhost:8000/src/imgに見つかりませんこれは私の画像がどこに住んでいるのですか?サーバー側のレンダリング404がすべての画像に見つかりません

server.js

app.use(express.static(path.join(__dirname, './src', '/img'))); 

app.get('*', (req, res) => { 

    const error =() => res.status(404).send('404'); 
    const htmlFilePath = path.join(__dirname, './', 'index.html'); 
    fs.readFile(htmlFilePath, 'utf8', (err, htmlData) => { 

    if(err) { 
     error() 
    } else { 
     match({ routes, location: req.url }, (err, redirect, renderProps) => { 

     if(err) { 
      error() 
     } else if(redirect) { 
      res.redirect(302, redirect.pathname + redirect.search); 
     } else if(renderProps) { 
      const createStoreWithMiddleware = applyMiddleware(promise)(createStore); 
      const store = createStoreWithMiddleware(reducers); 
      const RouterContext = react.createElement(reactRouter.RouterContext, renderProps); 
      const provider = react.createElement(Provider, { store: store }, RouterContext); 
      const ReactApp = renderToString(provider); 
      const RenderedApp = htmlData.replace('{{SSR}}', ReactApp); 
      res.status(200).send(ReactApp); 
     } else { 
      error(); //Always enters this when trying to render images. 
     } 
     }); 
    } 
    }); 
}); 

答えて

0

Expressのドキュメントを参照してください:http://expressjs.com/en/starter/static-files.html

あなたはあなたのイメージのために間違ったパスを使用しても良いです。あなたのHTMLを見るのに役立ちますが、/src/img/my-image.jpgのようなイメージのsrcを設定すると、静的ミドルウェアはあなたが与えたパスに相対的なので、それは動作しません。必要に応じて、app.use(express.static(path.join(__dirname, './src')));を試してから画像に/img/my-image.jpgを使用してください。

+0

私はそれが問題ではないと思います。私の一致方法では、自動的にエラーを表示するelse文を入力します。 – joethemow

+0

これはreq.urlとルートを一致させようとしていますが、ルートではなく単なるイメージパスです。 – joethemow

+0

まあ、明白な答えは、 'redirect'と' renderProps'は 'undefined'なので、あなたは落としてエラーを取得します。そしてそのポイントはまだ立っています。あなたのマシンでは、画像は '/ src/img'に存在するかもしれませんが、' localhost:8000/src/img'は静的なパスではありません。あなたがやろうとしていることが分からない限り、必要なコードをすべて記入してください。 – mherzig

関連する問題