Запуск процесса node.js шаг за шагом
Я был разработчиком 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 и список комментариев)
и я смотрю мою консоль, если первый запуск
output : {
id : 1
title : title 1..
...
..
}
undefined
Если я обновлю свой браузер снова, весь вывод будет завершен, чтобы показать (не показывать неопределенный)
Мой вопрос: как заставить мой код запускать процесс шаг за шагом, пока процесс не завершится и не будет доставлен в представления?
Есть проблемы с моим кодом?
Спасибо!
1 ответ
Чтобы правильно ответить на ваш первоначальный вопрос, вы можете пойти шаг за шагом, используя точки останова. В последнем узле 7 и теперь 6 вы можете использовать Chrome Dev Tools для отладки приложения узла. Вам нужно установить несколько точек останова и посмотреть переменные, которые помогут вам понять:
- порядок исполнения
- точные значения переменных в ключевые моменты
Я все еще думаю, что разбить большую программу на более мелкие программы было бы полезно и уменьшить количество сюрпризов, но обучение правильной отладке также действительно полезно!
Вы просто запускаете программу с node --inspect index.js
, а затем ссылка будет отображаться на консоли, которую вы загружаете в браузере Google Chrome.
Существует более подробное руководство, которое может помочь.
Официальная документация также стоит прочитать.