Nodejs求助,怎样连接上后,让服务端发起向远端的请求,然后把响应发回来呢

Nodejs求助,怎样连接上后,让服务端发起向远端的请求,然后把响应发回来呢

我已经明白

var options = { host: ‘XXX.X.X.XX’, port: 7379, path: ‘/GET/soscount’, method: ‘get’ }; http.get(options, function(res) { console.log("Got response: " + res.statusCode); res.on(‘error’, function(e) { console.log("Got error: " + e.message); }).on(‘data’, function (chunk) { console.log('BODY: ’ + chunk); }) });

也会建立

var http = require(‘http’); http.createServer(function(req,res){ res.writeHead(200,{‘Content-Type’:‘text/html’}) res.write(’<h1>node</h1>’) res.end(’<p>hello</p>’) }).listen(4000); console.log(“httpServer is listening at port 4000”)

我现在想 连接到server后,发起那个get请求,之后把数据返回给这个连接的response 应该怎样写呢?


6 回复

要实现从客户端连接到服务器后,服务器再发起一个远端的GET请求并将响应返回给客户端,你可以使用Node.js的http模块来创建HTTP服务器,并使用http.requesthttps.request(取决于你的需求)来发起远端请求。下面是一个简单的示例,展示了如何实现这一功能。

首先,确保你已经安装了Node.js环境。以下是完整的代码示例:

1. 创建HTTP服务器

const http = require('http');
const https = require('https'); // 如果需要发起HTTPS请求,可以使用此模块

// 创建HTTP服务器
const server = http.createServer((req, res) => {
    console.log('Client connected');

    // 发起远端GET请求
    const options = {
        host: 'example.com',
        port: 80,
        path: '/api/data',
        method: 'GET'
    };

    // 使用http.request发起请求
    const remoteRequest = https.request(options, (remoteRes) => {
        let data = '';

        remoteRes.on('data', (chunk) => {
            data += chunk;
        });

        remoteRes.on('end', () => {
            // 将远端请求的响应数据发送回客户端
            res.writeHead(200, {'Content-Type': 'application/json'});
            res.end(data);
        });
    });

    remoteRequest.on('error', (e) => {
        console.error(`Problem with request: ${e.message}`);
        res.writeHead(500, {'Content-Type': 'text/plain'});
        res.end('Internal Server Error');
    });

    // 发送请求
    remoteRequest.end();
});

server.listen(4000, () => {
    console.log('Server is listening on port 4000');
});

解释

  • 服务器创建:使用http.createServer()创建一个HTTP服务器,监听端口4000。
  • 请求处理:每当有新的客户端连接时,服务器会创建一个新的HTTP请求对象,配置远端服务器的信息(包括主机名、端口、路径和方法)。
  • 发起请求:使用https.request()发起GET请求到远端服务器。
  • 处理响应:当收到远端服务器的响应时,将响应的数据收集起来,并最终将其作为响应发送回客户端。
  • 错误处理:如果在请求过程中发生错误,服务器会发送一个500状态码的响应,并将错误信息记录到控制台。

通过这种方式,你可以实现从客户端连接到服务器后,服务器再发起一个远端的GET请求并将响应返回给客户端的功能。


代码没标记啊亲… 没理解错的话, 前一段代码放到后一段代码 createServer 的回调函数里, 然后把 res.write 放到 http.get 的回调函数里(变量名不能重复就是了), 那样就可以了.

谢谢你的回答啊。。 是这个意思么:

var http = require('http');
http.createServer(function (req, resq) {
	var options = {
		host : '111.1.3.68',
		port : 7379,
		path : '/GET/soscount',
		method : 'get'
	};
	http.get(options, function (res) {
		console.log("Got response: " + res.statusCode);
		res.on('error', function (e) {
			console.log("Got error: " + e.message);
		}).on('data', function (chunk) {
			console.log('BODY: ' + chunk);
		}).end(
			resq.writeHead(200, {
				'Content-Type' : 'text/html'
			})
			resq.write('<h1>node</h1>')
			resq.end('<p>hello</p>'))
	});
}).listen(4000);
console.log("httpServer is listening at port 4000")

然后resq他找不到啊。。。

var http = require('http'),
q = require('querystring');

http.createServer(function (req, res) {
    //创建geo 经纬度, 用于取Google 地图
    var url=["/maps/geo?q="
        ,q.parse(req.url)["long"]
        ,","
        ,q.parse(req.url)["lat"]
        ,"&output=json&sensor=false"].join(""),
        //创建options
        options={host:"maps.google.com" ,path:url};

    //log
    console.log("url:",options.host+options.path);
    console.log("requrl:",req.url);

    //服务端发出请求get
    http.get(options,function(response){
        //console.log("hi",response);
        res.writeHead(200, {'Content-Type': 'text/plain'});
        var pageData = "";
        response.setEncoding('utf8');
        //接受数据,保存
        response.on('data', function (chunk) {
          pageData += chunk;
        });

        //数据接收完毕, 输出到客户端
        response.on('end', function(){
          res.write(pageData);
          res.end();
        });

    });

}).listen(80);

看了你的,明白怎么写了,非常感谢你们的回答!

根据你的需求,你需要在服务端接收到客户端的连接请求后,再向远端发起一个GET请求,并将远端的响应结果返回给客户端。这里可以使用http模块来完成服务端的HTTP请求,同时使用回调函数或事件机制来处理请求和响应。

以下是具体的实现方法:

const http = require('http');
const querystring = require('querystring');

// 创建服务端
http.createServer((req, res) => {
    // 发起GET请求到远端服务器
    const options = {
        host: 'XXX.X.X.XX',
        port: 7379,
        path: '/GET/soscount',
        method: 'GET'
    };

    const remoteRequest = http.request(options, (remoteRes) => {
        let data = '';

        remoteRes.on('data', (chunk) => {
            data += chunk;
        });

        remoteRes.on('end', () => {
            // 将远端响应返回给客户端
            res.writeHead(200, { 'Content-Type': 'application/json' });
            res.end(data);
        });
    });

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

    // 向远端服务器发送请求
    remoteRequest.end();
}).listen(4000);

console.log('http server listening on port 4000');

这段代码首先创建了一个监听4000端口的服务端,当接收到客户端的连接请求时,会向远端服务器发起一个GET请求。获取到远端服务器的响应后,将响应结果以JSON格式返回给客户端。

请注意替换options对象中的host字段为你实际需要访问的远端服务器地址。

回到顶部