Node.js 跨域实现的理解以及遇到的各种奇葩问题

Node.js 实现跨域访问的简单使用

做毕设的时候写的一个小系统,部署在tomcat,运行在localhost:8080,这个就先作为提供数据的一个服务。

参考别人的例子写了个跨域访问的demo
代码如下:

  const http = require('http');

	http.createServer((req, resp)=>{
	  const proxyReq = http.request({
	    port: 8080,
	    host: req.headers['host'],
	    method: req.method,
	    path: req.url,
	    headers: req.headers,
	  });
	  proxyReq.on('response', (proxyRes) => {
	    proxyRes.on('data', (data) =>{
	      resp.write(data, 'binary');
	    });
	    proxyRes.on('end', () =>{
	      resp.end();
	    });
	    resp.writeHead(proxyRes.statusCode, proxyRes.headers);
	  });
	
	  req.on('end', ()=>{
	    proxyReq.end();
	  });
	  req.on('data', (data)=>{
	    proxyReq.write(data, 'binary');
	  });
	}).listen(3000);

当我运行起来的时候,localhost:8080 页面输出了接口返回的数据。但是在localhost:3000控制台报错如下:

Error: getaddrinfo ENOTFOUND localhost:3000 localhost:3000:8080
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:57:26)

猜想:host这行(行号:6)会不会是多余的,因为后面端口号重复了localhost:3000:8080,我把这行直接去掉,发现可以了。直接写成localhost或者127.0.0.1也是可以的。
我对这方面也几乎是一点都不了解,控制台打印了下req.headers[‘host’]结果是 localhost:3000,我去百度随便点开一个请求 他的host是www.baidu.com没有端口号,我又打开一个公司做的系统的网址 它的请求的host就是带端口号的。(关于这个我写在总结[1]中)。
express:

const express = require('express');
const request = require('request');
const app = express();

const proxyServer = 'http://localhost:8080';

app.use('/', (req, res) => {
  const url = proxyServer + req.url;
  req.pipe(request(url)).pipe(res);
});

app.listen(3000);

总结:
[1]q:为什么有的网址带端口号,有的不带?
a: 80的默认不显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值