2017-01-03 14 views
-2

私はPHP開発者でしたが、私はpraticingのためにnode.jsを使ってコードを書こうとしています。プログラムを実行するとnode.jsを混乱させます。コード行は次の行にジャンプします。node.js proccessをステップバイステップで実行しています

これは私のコードの一部です:

//article.js  
var article_model = require('../models/article_model'); 
var comment_model = require('../models/comment_model'); 

var list_article,list_comment; 

app.set('views','./views/article/'); 
app.set('view engine','ejs'); 

app.get('/list_article',csrfProtection,function(req,res){ 

master_model.get_article(req,xparams,function(status,result,total_data){ 
    list_article = result.data; 
    }); 
console.log(list_article); 

master_model.get_comment(req,xparams,function(status,result,total_data){ 
    list_comment = result.data; 
    }); 
console.log(list_comment); 

var params = { 
       title   : "Article List", 
       data_article  : list_article, 

      }; 
      res.render('content.ejs',params); 
}); 

、その後

//master_model.js 
exports.get_article = function (req,hash, fn) { 


    var auths = { 
     user : api_server["auth_username"], 
     pass : api_server["auth_password"], 
    } 


    request.get({url:"http://myapi.com/article/latest", auth:auths } , function(err,httpResponse,body) { 
     if (!err && httpResponse.statusCode == 200) { 
     var temp = JSON.parse(body); 

      if (temp.status == 1){ 
      result_data = {status:1, message : temp.message ,data : temp.data}; 
      return fn(true,result_data,1); 

      }else if(temp.status == 0){ 
      result_data ={ status:0, message : temp.message}; 
      return fn(false,result_data,0); 
      } 

     }else{ 
     result_data ={ status:0, message : "error, please try again"}; 
     return fn(false,result_data,0); //something problem to API 
     } 

    }) 


}; 

exports.get_comment = function (req,hash, fn) { 


    var auths = { 
     user : api_server["auth_username"], 
     pass : api_server["auth_password"], 
    } 


    request.get({url:"http://myapi.com/comment/latest", auth:auths } , function(err,httpResponse,body) { 
     if (!err && httpResponse.statusCode == 200) { 
     var temp = JSON.parse(body); 

      if (temp.status == 1){ 
      result_data = {status:1, message : temp.message ,data : temp.data}; 
      return fn(true,result_data,1); 

      }else if(temp.status == 0){ 
      result_data ={ status:0, message : temp.message}; 
      return fn(false,result_data,0); 
      } 

     }else{ 
     result_data ={ status:0, message : "error, please try again"}; 
     return fn(false,result_data,0); //something problem to API 
     } 

    }) 


}; 

私は私のコード、および開いているブラウザを実行したときに、私は再び私のブラウザのショーを更新すると、出力データは、空白であります私のデータ出力に含ま(artcileリスト、およびcommmentリスト)

と最初の実行

場合、私は私のコンソールを見て

私は再び私のブラウザを更新した場合、完全なすべての出力は、(未定義示していない)表示する

私の質問:私のコードは、処理終了までのステップによる処理ステップを実行させるとビューに提供する方法 ?

私のコードに問題がありますか?

ありがとうございます!

+0

コードがジャンプしません。 Javascriptは、イベントがコールバックをトリガする場合を除いて、線形です(これは、非線形よりも非同期としてよく記述されます)。ブラウザがルート上でリクエストを行うと、リクエストを処理する関数が呼び出され、すべての行がコールバック内で順番に呼び出されます。 – SamMorrowDrums

+0

@SamMorrowDrums答えに感謝します。どのように私のコードがライン上で同期するのですか? – helo1987

+0

私はどこから始めるべきかわかりません - あまりにも多くのことが起こっています。おそらくこれを小さなプログラムに分割して開始するべきです。基本的なこんにちはの世界をやろう...コールバックの仕組みや、認証、ejs、複数のモジュールを使わずに状態を管理する方法を学ぶ...これは提案するのが難しい。あなたが標準のHTTPサーバを使用しているように見えますが、あなたがmodule expressを使用しているように見える 'app.set( 'views'、 '。/ views/article /');'私はあなたがあまりにも深く入り込んだと思う。あなたがいくつかの機能を分離することができれば、この点に戻るのにあなたは長くかかりません。 – SamMorrowDrums

答えて

0

最初の質問に適切に対処するには、実際にブレークポイントを使用して段階的に進めることができます。最新のノード7および6では、Chrome Dev Toolsを使用してノードアプリケーションをデバッグすることができます。私はまだ小さなプログラムに大きなプログラムを考え壊すと思う

キー瞬間に

    • 実行順序
    • 変数の正確な値:あなたは、いくつかのブレークポイントを設定し、あなたが理解するための変数を監視する必要があります驚きを減らすのに役立ちますが、正しくデバッグすることを学ぶことも本当に便利です!

      node --inspect index.jsでプログラムを実行するだけで、Google Chromeブラウザにロードするコンソールにリンクが表示されます。

      さらにthorough guideがあります。これは役立つ可能性があります。

      official documentationも読む価値があります。

  • +0

    okありがとう..:D – helo1987

    関連する問題