Node.js 如何下载、修改和服务远程页面
我尝试创建一个http服务器,该服务器将在https://google.com 并在本地主机上提供:3000。有点像代理 使用此代码: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) => {
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)