2017-06-08 14 views
-2

コールバックで本当に時間がかかります。私は、画像を取得し、画像ファイルのMIMEタイプを決定するメソッドを実行する関数を持っています。そのMIMEタイプを取り、応答ヘッダーを設定してファイルを送信したいと思います。ファイルの種類を設定しコールバックを返すのは関数ではありません

.get(function(req,res){ 
    var fileName = req.params.filename; 
    var UPLOAD_PATH = "__dirname + '/../uploads/images/'"; 

    function getFileType(fileType, callback){ 
     magic.detectFile(UPLOAD_PATH + fileName, function(err, fileType) 
    { 
     if (err) return callback(err); 
     callback(null, fileType); 
     }); 
    } 

    var fileType = getFileType(); 
    console.log('Get file type', fileType); 

    res.setHeader('Content-Type', fileType) 
    fs.createReadStream(path.join(UPLOAD_PATH, req.params.filename)).pipe(res) 
    }); 

ファイルタイプを取得するために実行

  1. に機能をご希望
  2. 戻り、そのファイルの種類今、私res.setHeader()

へエラーが発生しましたTypeError: callback is not a function

+0

あなたは 'var fileType = getFileType();'にパラメータを渡していません。あなたは関数を渡す必要があります。 'var fileType = getFileType(" someType "、function(arg){})'のように渡してみてください。 – Siva

+0

関数を引数として渡す理由を説明してください。 –

+0

ここであなたが話していることが分かったと思うhttps://youtu.be/qN0dkXj7jc0?t=6m16s これをまとめて試してみると、それが学習進歩のように感じているのであれば、 –

答えて

0

コールバック関数を定義します。それ以外の場合は定義されません。

.get(function(req,res){ 
    var fileName = req.params.filename; 
    var UPLOAD_PATH = "__dirname + '/../uploads/images/'"; 

function getFileType(fileType, callback){ 
    magic.detectFile(UPLOAD_PATH + fileName, function(err, fileType) 
{ 
    if (err) return callback(err); 
    callback(null, fileType); 
    }); 
} 
//Your Call back function defenition 
function callback(x, type){ 
// Show him the file type. 
} 

var fileType = getFileType(); 
console.log('Get file type', fileType); 

res.setHeader('Content-Type', fileType) 
fs.createReadStream(path.join(UPLOAD_PATH, req.params.filename)).pipe(res) 

});

+0

投稿した内容を理解しようとしていて、実際にはクリックしていません。コールバック宣言がget関数の範囲外であるようです。そして、あなたがここにいるように宣言すると、同じ結果がレンダリングされます。私はそれをスコープ内に移動しましたが、それは実行されますが、コールバックの必要性を否定するような感じです。 –

+0

このように、関数のコールバックは.getのコールバック関数内で少なくとも利用可能になります。このようなJS関数を定義することは、自己ホスティングであり、使用される場所を定義するために必要なスコープを持ちます。 –

関連する問題