2017-03-23 10 views
0

私は現在、データベースへの2回の別々の呼び出しの結果を含む配列を返すルートで作業しています。個別にモデル関数で呼び出す関数は意図したとおりに動作します。しかし、最初のコールバック内で2番目の関数を呼び出すことによってそれらを結合しようとすると、2番目の関数が "関数ではない"というエラーが表示されます。ここで私のリストルートのコードです。注意utilとerrorhandlerは、返される形式を助けるために作成したファイルであり、このエラーを引き起こしてはいけません。これを解決する助けに感謝します、ありがとう!Node.js関数が定義されていないエラーを返すコールバックでネストされました

ルート/リスト

router.route("/list/:id").get(function(req, res) { 
list.getListMovie(req.params.id, function(err, list) { 
if (err) { 
    res.json(errorHandler.handleDatabaseErrors(err)); 
    return; 
} 
var response = []; 
response["movies"] = list; 
console.log(response) 
list.getListTV(req.params.id, function(err, list1) { 
    if (err) { 
    res.json(errorHandler.handleDatabaseErrors(err)); 
    return; 
    } 
    response["tv"] = JSON.parse(list1); 
    console.log(response) 
    res.json(utils.returnFormatForDB(response)); 
    }); 
    }); 
}); 

モデル内の関数定義を/リスト

exports.getListTV = function(userid, done) { 
db.get().query('SELECT `idmedia`, `rating`, `title`, `poster_path` FROM 
`list` JOIN `tv` ON list.idmedia = tv.tv_id WHERE list.idusers = ?', userid, 
function(err, rows) { 
    if (err) return done(err); 
    done(null, rows); 
}); 
} 

exports.getListMovie = function(userid, done) { 
db.get().query('SELECT `idmedia`, `rating`, `title`, `poster_path` FROM 
`list` JOIN `movies` ON list.idmedia = movies.movie_id WHERE list.idusers = 
?', userid, function(err, rows) { 
    if (err) return done(err); 
    done(null, rows); 
}); 
} 

EDIT ::私は答えたとして、質問をマークする適切な方法のかわからないが、固定することにより、リストのオーバーライドと応答をオブジェクトにする私のコードを動作させることができました。助けてくれてありがとう!

+2

'getListMovie'関数呼び出しで' list'を上書きしています。 '(err、list)'を '(err、movieList)'のように変更してください。 – forrestmid

+0

それを指摘していただきありがとうございますが、それは関数が見つかりませんエラーを変更しません –

答えて

0

変数listを上書きしています。また

list.getListMovie(req.params.id, function(err, movieList) { 
    if (err) { 
    res.json(errorHandler.handleDatabaseErrors(err)); 
    return; 
    } 
    var response = {}; 
    response["movies"] = movieList; 
    console.log(response) 
    list.getListTV(req.params.id, function(err, tvList) { 
    if (err) { 
     res.json(errorHandler.handleDatabaseErrors(err)); 
     return; 
    } 
    response["tv"] = JSON.parse(tvList); 
    console.log(response) 
    res.json(utils.returnFormatForDB(response)); 
    }); 
}); 

を試してみてください、私はあなたがresponse変数がオブジェクトではなく、配列になりたい確信しています。

+1

ありがとう!それをオブジェクトにすることは、配列の上書きを修正することと一緒にトリックを行うように見えた –

関連する問題