2016-10-17 14 views
3

私は、ユーザーがアップロードしたすべての曲がアップロードされるディレクトリを持っています。私はこのアプリのmongodbを使っていますが、mongodbは正常に動作していますが、使いたいです src urlはuploads/something/songs/user/songnameになります。Controller.jsに示されているようにRouter.getを使用しようとしました しかし、これは私が内部500エラーを持っている、私が間違っていたknwoを教えてください。静的URLを動的に変更する - NodeJS

controller.js

Router.get('/songs/:artist/:song', (req, response) => { 
    console.dir(req.query) 
    let file = './uploads/01-Whole Lotta Love.mp3' 
    var stat = FileSystem.statSync(file) 

    response.setHeader('Content-Type', 'audio/mpeg'); 
    response.setHeader('Content-Length', stat.length); 

    fs.createReadStream(file).pipe(response); 
}) 

app.js

app.use(Express.static(path.join(__dirname, 'uploads'))); 

profile.ejs

<table border="1"> 
    <% artist.songs.forEach((song) => { %> 
    <tr> 
     <td> <%= song.song %> </td> 
     <td> 
      <audio controls> 
       <source src="./songs/<%= artist.artistName+ '/' + song.audioPath %>" type="audio/mpeg"> 
       Your browser does not support the audio element. 
      </audio> 
     </td> 
     <td>3k listens</td> 
     <td>2k likes</td> 
     <td>2k comments</td> 
    </tr> 
    <% }) %> 
</table> 

その今までに何のように私はありがとう、事前に

ディレクトリを使用しますアップロード/ songname歌/ anyusername/songnameのために書く:)

+0

それは多分、あなたのケースで役立つかもしれないHTMLベースのタグを使用して、サーバー/急行のconfig /構文エラーでない限り:http://www.w3schools.com/tags/tag_base.asp – mika

+0

なぜありませんy生成されたHTMLファイルの外観(ブラウザに表示される内容)を表示します。テンプレートは表示されません。あなたはブラウザでView/Sourceを使ってそれを得ることができます。おそらくあなたの曲のURLはHTMLページで間違っていますが、確かに知るにはHTMLを生成する必要があります。 – jfriend00

答えて

2

ブラウザで開いて、このコードは、試してみてください。http://host:port/song/foo/bar
をし、あなたは何を得るのコメントに書きます:

const 
    fs = require('fs'), 
    path = require('path'), 
    bufferSize = 100 * 1024; 

Router.get('/songs/:artist/:song', (req, res) => { 
    let 
    file = '01-Whole Lotta Love.mp3'; 
    file = path.join(__dirname, 'uploads', file); 

    console.log('Piping file:', file); // check if path is correct 

    fs.stat(file, 
    (err, stat) => { 
     if(err) { 
     return res.status(500).send(err); // output error to client 
     } 

     res.writeHead(200, { 
     'Cache-Control': 'no-cache, no-store, must-revalidate', 
     'Pragma': 'no-cache', 
     'Expires': 0, 
     'Content-Type': 'audio/mpeg', 
     'Content-Length': stat.size 
     }); 
     fs.createReadStream(file, {bufferSize}).pipe(res); 
    }); 
}) 
+1

ありがとうございます@ num8er私はあなたのコードにいくつかのURLの編集を行いました、そして今、それはcharm \ m / –

関連する問題