Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何下载、修改和服务远程页面_Node.js_Express_Https_Http Proxy - Fatal编程技术网

Node.js 如何下载、修改和服务远程页面

Node.js 如何下载、修改和服务远程页面,node.js,express,https,http-proxy,Node.js,Express,Https,Http Proxy,我尝试创建一个http服务器,该服务器将在https://google.com 并在本地主机上提供:3000。有点像代理 使用此代码: const express = require('express') const https = require('https') const app = express() app.get('/', function (req, mainRes) { https.get('https://www.google.fr', (res) => {

我尝试创建一个http服务器,该服务器将在https://google.com 并在本地主机上提供:3000。有点像代理

使用此代码:

const express = require('express')
const https = require('https')

const app = express()

app.get('/', function (req, mainRes) {
    https.get('https://www.google.fr', (res) => {
        res.on('data', (d) => {
            mainRes.send(d)
        })
    })
})

app.listen(3000)
google.com上的html似乎已下载,但服务器因以下错误而崩溃:

错误:发送邮件后无法设置邮件头


我知道它与2个包装请求有关,但我不知道如何修复它。

我不能100%确定您的情况,但我建议您添加一个调试器语句并逐步执行。

在您的代码中,参数res是一个流,请参阅文档

当前,您正试图在每次通过该流接收区块时发送完整响应。因此,您将收到一个错误,即无法在发送标题后设置标题。因为第二次调用mainRes.send时,您正在尝试再次发送整个响应。请参阅“快递”文档

您希望通过express response对象传递res,因为这也是一个流:

const express = require('express')
const https = require('https')

const app = express()

app.get('/', function (req, mainRes) {
    https.get('https://www.google.fr', (res) => {
        mainRes.pipe(res)
    })
})

app.listen(3000)

@sdgluck&&@kwesi1337帮助我找到了一个解决方案,我需要从数据事件中提取所有数据块:


谢谢,没有错误了,但是这个代码片段似乎没有返回任何东西,并且localhost:3000在超时之前一直在旋转。另外,如果我想修改google.com的html,该怎么办?再次感谢
const express = require('express')
const https = require('https')

const app = express()
let data = ''

app.get('/', function (req, mainRes) {
    https.get('https://www.google.fr', (res) => {
        res.on('data', (chunk) => {
            data += chunk;
        })
        res.on('end', () => {
            mainRes.end(data);
        });
    })
})

app.listen(3000)