我是一名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
如果我再次刷新浏览器,则所有输出完成显示(未显示未定义)
我的问题: 如何使我的代码逐步运行流程,直到流程结束并传递给视图?
我的代码有问题吗?
谢谢!
答案 0 :(得分:0)
要正确解决您的初始问题,您实际上可以使用断点逐步进行。在最新的节点7和现在的6中,您可以使用Chrome Dev Tools来调试节点应用程序。您需要设置一些断点并观察变量以帮助您理解:
我仍然认为将大型程序分解为较小的程序会有所帮助并减少意外,但学习正确调试也非常有用!
您只需使用select->option
运行该程序,然后您将在Google Chrome浏览器中加载的控制台上显示一个链接。
还有更多thorough guide,这可能有所帮助。
official documentation也值得一读。