2016-07-17 14 views
0

API(wrike.com)にHTTPSリクエストを行い、フロントエンドに表示するために結果を自分のビューに渡すのに苦労している以外はすべて動作します。NodeJSが結果をHTTPSリクエストからビューに渡す

これは、関数のコードです:私はconsole.log(folders);ラインがコンソールで期待される結果を示しているとして、関数の動作を知って

router.get('/dmd', ensureAuthenticated, function(req, res, next) { 
wrike.getWrikeFolder(user, function(err, folders) { 
    //if(err) throw err; 
    res.render('dmd-codes', { 
     title: 'DMD Codes', 
     nav: 'Admin', 
     folders: folders 
    }); 
    }); 
}); 

module.exports.getWrikeFolder = function(user, callback) { 
User.findOne({email: user}, function(err, doc){ 
if(err) throw err; 
var accessToken = doc.wrikeaccess; 
console.log(accessToken); 

var data = querystring.stringify({ 
    "descendants": true, 
    "project": false 
}); 

var options = { 
    host: 'www.wrike.com', 
    method: 'GET', 
    path: '/api/v3/folders/', 
    headers: { 
    'Content-Type': 'application/x-www-form-urlencoded', 
    'Authorization': 'bearer ' + accessToken 
    } 
} 

var folders = []; 

var request = https.request(options, function(res) { 
    res.on('data', function (chunk) { 
    folders.push(chunk); 
    }).on('end', function() { 
    folders = Buffer.concat(folders).toString(); 
    console.log(folders); 
    }); 

}); 

request.on('error', function(e) { 
    console.log('problem with request: ' + e.message); 
}); 

request.write(data); 
request.end(err, folders); 
}); 
} 

そしてこれがルートのコードです。私は道に結果を得るために何が欠けている。

ありがとうございました。

答えて

1

callbackを、APIへのhttpリクエストを実行するモジュールで実行しないように見えます。つまり、res.render()は実行されません。 callbackの実行を​​の内部に追加してみてください。

module.exports.getWrikeFolder = function(user, callback) { 
    User.findOne({email: user}, function(err, doc){ 
    // if(err) throw err; // NOOOO! Use callbacks ;) 
    if (err) return callback(err); 

    // ... (your code) 

    var request = https.request(options, function(res) { 
     res.on('data', function (chunk) { 
     folders.push(chunk); 
     }).on('end', function() { 
     folders = Buffer.concat(folders).toString(); 
     console.log(folders); 

     // make sure to execute callback! 
     callback(null, folders); 

     }); 

    }); 

    request.on('error', function(e) { 
     console.log('problem with request: ' + e.message); 
     // don't forget to use the callback!! 
     return callback(new Error('problem with request: ' + e.message)); 
    }); 

    request.write(data); 
    request.end(err, folders); 
    }); 
} 
+0

それはうまくいきました。助けてくれてありがとう。 –

+0

問題ありません!ノードのコールバックを忘れないでください!ほぼすべてが非同期であることを忘れないでください。 – jakerella

+0

こんにちはJakerella、これは配列として変数を渡していません。私は 'toString()'を関数から取り除こうとしましたが、これはどちらもしません。これを配列にする方法を私に教えることができるので、私のビュー内でforループを実行して、並べ替えられたデータを表示することができますか?何か助けてもらえたらもう一度おねがいします。 –

関連する問題