关于nodejs http模块的一个基础问题

在官方文档中有这么一段示例代码

var postData = querystring.stringify({
  'msg' : 'Hello World!'
});

var options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': Buffer.byteLength(postData)
  }
};

var req = http.request(options, (res) => {
  console.log(`STATUS: ${res.statusCode}`);
  console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
  res.setEncoding('utf8');
  res.on('data', (chunk) => {
    console.log(`BODY: ${chunk}`);
  });
  res.on('end', () => {
    console.log('No more data in response.');
  });
});

req.on('error', (e) => {
  console.log(`problem with request: ${e.message}`);
});

// write data to request body
req.write(postData);
req.end();

由于我nodejs知识还是比较薄弱,所以现在还是想问大家一下 如果我想发送多个http请求,只是postData的参数不一样,我该在哪里设置循环?是

var req = http.request(options, (res) => {
});
req.write(postData);
req.end();

还是应该

req.write(postData);
阅读 2.7k
2 个回答

多次req.write(postData);算是一次请求。所以根据你的多个http请求应该是请求多项数据(我觉得接受请求的服务器应该是针对每次请求做响应,而不一定会去分析多个postData叠加的结构),应该是执行多次整体部分。
贴个文档吧中文文档
上面也是我的理解。有错误欢迎指出。

封装成一个方法来调用不就得了,示例:



function httpReq(postData) {
  if (typeof postData === 'object') {
    postData = querystring.stringify(postData);
  }

  const options = {
    hostname: 'www.google.com',
    port: 80,
    path: '/upload',
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Content-Length': Buffer.byteLength(postData)
    }
  };

  return new Promise((resolve, reject) => {
    const req = http.request(options, (res) => {
      console.log(`STATUS: ${res.statusCode}`);
      console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
      res.setEncoding('utf8');
      res.on('data', (chunk) => {
        console.log(`BODY: ${chunk}`);
      });
      res.on('end', () => {
        console.log('No more data in response.');
        resolve(chunk);
      });
    });

    req.on('error', (e) => {
      console.log(`problem with request: ${e.message}`);
      reject(e.message);
    });

    // write data to request body
    req.write(postData);
    req.end();
  });
}


var postData = [{
  'msg' : 'Hello World!'
}, {
  'msg' : 'hi!'
}];

// 并发式调用
httpReq(postData[0]);
httpReq(postData[1]);

// 或者串行执行
httpReq(postData[0])
  .then((chunk) => {
    console.log(chunk);
    return httpReq(postData[0]);
  })
  .then((chunk) => {
    console.log(chunk);
  })
  .catch((err) => {
    console.log(err.message);
  });
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题