0

如果我想将结果写入回调函数内部进行响应,但我无法访问函数中的 res 变量,也无法访问函数外部的结果。

那么如何在内部和外部之间传递价值呢?

var http = require('http');
var url = require('url');

http.createServer
(
    function (req, res)
    {
        var output='';
        res.writeHead(200, {'Content-Type': 'text/plain'});


        //The url we want is: 'www.random.org/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
        var options = {
          host: 'www.random.org',
          path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
        };

        callback = function(response) {
          var str = '';

          //another chunk of data has been recieved, so append it to `str`
          response.on('data', function (chunk) {
            str += chunk;
          });

          //the whole response has been recieved, so we just print it out here
          response.on('end', function () {
            console.log(str);

            //output+=str; //get result
          });
        }

        http.request(options, callback).end();


        //output+=str; //get result
        res.end(output);
    }
).listen(80, '127.0.0.1');

版本 2

var http = require('http');
var url = require('url');

http.createServer
(
    function (req, res)
    {
        var output='';
        res.writeHead(200, {'Content-Type': 'text/plain'});


        //The url we want is: 'www.random.org/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
        var options = {
          host: 'www.random.org',
          path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
        };

        callback = function(response) {
          var str = '';

          //another chunk of data has been recieved, so append it to `str`
          response.on('data', function (chunk) {
            str += chunk;
          });

          //the whole response has been recieved, so we just print it out here
          response.on('end', function () {
            res.write('inside');
          });
        }

        http.request(options, callback).end();

        res.write('outside');
        res.end(output);
    }
).listen(80, '127.0.0.1');

版本 3

var http = require('http');
var url = require('url');

http.createServer
(
    function (req, res)
    {
        res.writeHead(200, {'Content-Type': 'text/plain'});


        //The url we want is: 'www.random.org/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
        var options = {
          host: 'www.random.org',
          path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
        };

        callback = function(res) {
          var str = '';

          //another chunk of data has been recieved, so append it to `str`
          res.on('data', function (chunk) {
            str += chunk;
          });

          //the whole response has been recieved, so we just print it out here
          res.on('end', function () {
            res.write('inside');
            //or
            this.write('inside');
          });
        }

        http.request(options, callback).end();


        res.write('outside');
        res.end();
    }
).listen(80, '127.0.0.1');

版本 4

var http = require('http');
var url = require('url');

http.createServer
(
    function (req, res)
    {
        res.writeHead(200, {'Content-Type': 'text/plain'});


        //The url we want is: 'www.random.org/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
        var options = {
          host: 'www.random.org',
          path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
        };

        callback = function(response) {
          var str = '';

          //another chunk of data has been recieved, so append it to `str`
          response.on('data', function (chunk) {
            str += chunk;
          });

          //the whole response has been recieved, so we just print it out here
          response.on('end', function () {
            res.write('inside');
          });
        }

        http.request(options, callback);


        res.write('outside');
        res.end();
    }
).listen(80, '127.0.0.1');
4

1 回答 1

0

你不能。设置回调的函数将在回调执行之前完成并返回。如果没有,则不需要回调。

在回调本身中做任何你需要做的工作,而不是在父函数中。

我无法访问函数中的 res 变量

你应该能够。它仍在范围内。

(尽管如果您end()在回调运行之前调用它,那么应该会损坏)。

于 2013-02-13T14:16:53.827 回答