一个问题,请noder帮忙看看~
发布于 10 年前 作者 chenkaiC4 4007 次浏览 最后一次编辑是 8 年前

代码如下,一个路由件,我通过request发送http请求,将获取的数据赋值给content。

router.get('/路由', function(req, res) {
  var content = '';
  var options = 已经有了;
  request(options, function(err, res, data) {
    if (err) {throw err;}
    content = data;
  });
  //执行下一句话时,request语句还没有返回data,所以失败。。。
  res.send(content);
}

请noder提供几个方案,如何才能实现res.send(content);

7 回复

已经找到办法解决了,自己写一个回调函数来实现数据的传递~

欢迎noder提供更好的方法解决~

var content = '';
  var f1 = function(callback) {
    request(options, function(err, res, data) {
      if (err) {throw err;}
      console.log('====' + req.url);
      content = data;
      callback(content);        
    });
  };
  
  var f2 = function(content){
    console.log('开始调用');
    res.send(JSON.parse(content));
  };
  //下面这句话就执行了这个过程,实现了想要的效果。
  f1(f2);
router.get('/路由', function(req, res) {
  var content = '';
  var options = 已经有了;
  request(options, function(err, res, data) {
    if (err) {throw err;}
    content = data;
    //把这一句放到这里如何?
    res.send(content);
  });
}

同意二楼,LZ为何还要绕这么大一圈? 难道其中有深意

@Hi-Rube @Airead

get路由的回调函数参数res不能传进来。如果这样写,使用的是request的res,返回的结果是have no method ‘send’。而通过回调,正好利用闭包的特性,f2可以访问到get的回调res。^ _ ^

@chenkaiC4

router.get('/路由', function(req, res) {
  var content = '';
  var options = 已经有了;
  request(options, function(err, response, data) {
    if (err) {throw err;}
    content = data;
    //把这一句放到这里如何?
    res.send(content);
  });
} 

好了 ^ _ ^

@Hi-Rube -.-|||我去试试再告诉你结果

这个是express吧?

回到顶部