通过jsonP
只能处理get请求,在前端 datatype设置为jsonP 后端的响应时,通过res.jsonp 返回数据
通过设置cors中间件
// CORS:设置允许跨域中间件
var allowCrossDomain = function (req, res, next) {
// 设置允许跨域访问的 URL(* 表示允许任意 URL 访问)
res.header("Access-Control-Allow-Origin", "*");
// 设置允许跨域访问的请求头
res.header("Access-Control-Allow-Headers", "X-Requested-With,Origin,Content-Type,Accept,Authorization");
// 设置允许跨域访问的请求类型
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
// 设置允许服务器接收 cookie
res.header('Access-Control-Allow-Credentials', 'true');
next();
};
app.use(allowCrossDomain);
代理服务器
-
通过 http-proxy-middleware , 把所有发送给本域的请求,直接拦截下来转发给真正的服务器
const { createProxyMiddleware } = require('http-proxy-middleware'); const options = { target: 'http://localhost:8000', // 目标服务器的 host changeOrigin: true, // 默认 false,是否需要改变原始主机头为目标 URL pathRewrite: { // 重写请求 '^/api': '/', // 所有以 "/api" 开头的请求,"/api" 都会重写为 "/" } } // 该行代码必须写在 var app = express(); 之后 app.use('/api', createProxyMiddleware(options)); // proxy(options) 即创建代理
-
通过 request request-promise , 在后端路由中,处理当前数据再发送给真正服务器
const rp = require('request-promise'); router.post('/register', async function (req, res, next) { // 额外的处理 // 转发至目标服务器 const data = await rp({ uri: 'http://localhost:8000/users/register', //目标服务器uri method: 'post', //请求方式 body: req.body, //请求数据 json: true //用json格式发送 }); res.send(data); });