2017-01-03 3 views
-2

Я был разработчиком PHP, я пытаюсь написать код, используя node.js для praticing. M запутаться в 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 
     } 

    }) 


}; 

когда я запускаю мой код, и откройте браузер, выходные данные пустым, когда я обновить снова мой браузер шоу Ouput мои данные (список artcile и commment список)

и я смотрю свою консоль, если первый запуск

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

Если я снова обновить свой браузер, весь вывод полного, чтобы показать (не показывать неопределенным)

Моим вопрос: Как сделать мой код запустить процесс шаг за шагом до конца процесса и доставить просмотры?

Любая проблема с моим кодом?

Спасибо!

+0

Код не прыгает. Javascript является линейным, за исключением случаев, когда событие вызывает обратный вызов (который лучше описывается как асинхронный, чем нелинейный). Когда браузер делает запрос на маршруте, функция, обрабатывающая запрос, вызывается, и все строки будут вызываться по порядку, внутри обратного вызова. – SamMorrowDrums

+0

@SamMorrowDrums благодарит за ответ. так как мой код синхронизируется на линии.? – helo1987

+0

Я не знаю, с чего начать с вышеизложенного - у вас слишком много дел. Вероятно, вам следует начать с разбивки на более мелкие программы. Сделайте базовый мир привет ... узнайте, как работают обратные вызовы, и как вы можете управлять состоянием, без использования аутентификации, ejs и нескольких модулей ... Это слишком сложно, чтобы делать предложения. 'app.set ('views', './views/article /');' - похоже, что вы используете экспресс-модуль, однако затем вы, похоже, используете стандартный HTTP-сервер. Думаю, вы слишком сильно вскочили. Если вы можете выделить несколько функций, вам не нужно долго ждать, чтобы вернуться к этой точке – SamMorrowDrums

ответ

0

Чтобы правильно решить свой первоначальный вопрос, вы можете пойти шаг за шагом, используя точки останова. В последнем узле 7 и теперь 6 вы можете использовать инструменты Chrome Dev для отладки приложения-узла. Вы должны установить некоторые точки останова и наблюдения за переменными, чтобы помочь вам понять:

  • порядок выполнения
  • точные значения переменных в ключевые моменты

Я все еще думаю, преодолев большую программу на меньшие программы будет быть полезным и уменьшать сюрпризы, но научиться правильно отлаживать также очень полезно!

Вы только запускаете программу с node --inspect index.js, а затем на консоли, которую вы загружаете в браузере Google Chrome, будет отображаться ссылка.

Существует более thorough guide, что может помочь.

official documentation также стоит прочитать.

+0

ОК спасибо ..: D – helo1987

Смежные вопросы