【问题标题】:Return variable value from request.get inside one function to another NODEJS express从一个函数中的 request.get 返回变量值到另一个 NODEJS express
【发布时间】:2016-07-06 12:26:59
【问题描述】:

我正在调用一个函数,它 request.gets 一些 json 并从我的 router.get 中填充变量

变量在 callFunc 函数中获取它们的值,但它们在我的 router.get 中未定义

如何使它们成为全局的,以便我可以在 request.get 中分配值并使用 router.get 中的值

var title;
var headline;

router.get('/test/code/:code', function(req, res, next){
var procedure = "EXECUTE procedureName 999, 'userName', "+req.params.code
callFunc(procedure)     

  res.render('display', { 
    title: title,           // <-- This value here is undefined
    descritpion: headline,  // <-- This value here is undefined
    var1: 'block sidebar',
    var2: 'block content',
    image: 'http://baidun.com/wp-content/uploads/2013/06/SI_RM_1070bw-900x598.jpg',
    url: 'https://www.youtube.com/watch?v=ZB_VPDXAhKU'

  })
})


function callFunc(procedure){
request.get('http://myWebservice.com/myService.asmx/myServiceDB?callback=&userName=username&procedureName='+procedure, function(req, res, body){

    var testValue = body.slice(1, -2);
    var result1 = JSON.parse(testValue);
    var result2 = JSON.parse(result1);
    title = result2.jobSelect[0].jobTitle;
    headline = decodeURI(result2.jobSelect[0].jobHeadline);
    console.log(title)     // <-- I get the right value here
    console.log(headline)  // <-- I get the right value here
})
}

【问题讨论】:

    标签: javascript node.js express pug


    【解决方案1】:

    应该不需要全局范围内的数据。您可以简单地使用带有回调的 callFunc,然后将数据对象传回。

    router.get('/test/code/:code', function(req, res, next){
        var procedure = "EXECUTE procedureName 999, 'userName', "+req.params.code
        callFunc(procedure, function(obj) {     
            res.render('display', { 
                title: obj.title,           
                descritpion: obj.headline,
                var1: 'block sidebar',
                var2: 'block content',
                image: 'http://baidun.com/wp-content/uploads/2013/06/SI_RM_1070bw-900x598.jpg',
                url: 'https://www.youtube.com/watch?v=ZB_VPDXAhKU'
            });
        });
    });
    
    function callFunc(procedure, callback){
        request.get('http://myWebservice.com/myService.asmx/myServiceDB?callback=&userName=username&procedureName='+procedure, function(req, res, body){
            var testValue = body.slice(1, -2);
            var result1 = JSON.parse(testValue);
            var result2 = JSON.parse(result1);
            var obj = {
                title: result2.jobSelect[0].jobTitle,
                headline: decodeURI(result2.jobSelect[0].jobHeadline)
            };
            callback(obj);
        })
    }
    

    【讨论】:

      【解决方案2】:

      一种简单的方法是使用 res.render 作为回调。

      var title;
      var headline;
      
      router.get('/test/code/:code', function(req, res, next){
      var procedure = "EXECUTE procedureName 999, 'userName', "+req.params.code
      callFunc(procedure, function(title, headline) {     
      
        res.render('display', { 
          title: title,           
          descritpion: headline,
          var1: 'block sidebar',
          var2: 'block content',
          image: 'http://baidun.com/wp-content/uploads/2013/06/SI_RM_1070bw-900x598.jpg',
          url: 'https://www.youtube.com/watch?v=ZB_VPDXAhKU'
      
        })
      })
      })
      
      
      function callFunc(procedure, cb){
      request.get('http://myWebservice.com/myService.asmx/myServiceDB?callback=&userName=username&procedureName='+procedure, function(req, res, body){
      
          var testValue = body.slice(1, -2);
          var result1 = JSON.parse(testValue);
          var result2 = JSON.parse(result1);
          title = result2.jobSelect[0].jobTitle;
          headline = decodeURI(result2.jobSelect[0].jobHeadline);
          cb(title, headline);
      })
      }
      

      【讨论】:

      • 这是我使用的解决方案,谢谢。我之所以选择这个答案而不是另一个答案是因为它更简单。
      猜你喜欢
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 2021-08-14
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多