一步一步地运行node.js进程

时间:2017-01-03 15:34:25

标签: node.js synchronization

我是一名PHP开发人员,我正在尝试使用node.js编写代码来进行实践。当我执行我的程序时,我对node.js感到困惑,代码行跳转到下一行。

这是我的代码的一部分:

//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 list和commment list)

如果第一次运行我会看我的控制台

output : {
     id : 1
     title : title 1..
     ...
     ..
}
undefined

如果我再次刷新浏览器,则所有输出完成显示(未显示未定义)

我的问题: 如何使我的代码逐步运行流程,直到流程结束并传递给视图?

我的代码有问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

要正确解决您的初始问题,您实际上可以使用断点逐步进行。在最新的节点7和现在的6中,您可以使用Chrome Dev Tools来调试节点应用程序。您需要设置一些断点并观察变量以帮助您理解:

  • 执行顺序
  • 关键时刻的变量的精确值

我仍然认为将大型程序分解为较小的程序会有所帮助并减少意外,但学习正确调试也非常有用!

您只需使用select->option运行该程序,然后您将在Google Chrome浏览器中加载的控制台上显示一个链接。

还有更多thorough guide,这可能有所帮助。

official documentation也值得一读。