nodejs express 允许跨域设置

Posted 胖鹅68

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs express 允许跨域设置相关的知识,希望对你有一定的参考价值。

文章参考

1. 跨域通配符*与include报错,The value of the 'Access-Control-Allow-Origin' header '*'

 

为了模拟向后台发送请求,需要搭建一个web工程的demo,使用nodejs 的express 模拟web工程

 

var express = require("express");
var http = require("http");
var app = express();

// 获取post过来的数据 /
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded( extended: false ));

// 设置模板 /
var ejs = require("ejs");
//使用set方法,为系统变量“views”和“view engine”指定值。
app.set("views", __dirname + "/views");
// 指定模板文件的后缀名为html
app.set('view engine', 'html');
// 运行hbs模块
app.engine('html', ejs.__express);

// 利用文件来拆分路由的规模 /
var router = express.Router();
var router1 =  require('./routes/router1');
var router2 =  require('./routes/router2');
var router3 =  require('./routes/router3');
var testRouter =  require('./routes/test/test');
var sqhIndex =  require('./routes/sqh/sqhIndex');
var klwIndex =  require('./routes/klw/klwIndex');


//设置web工程的根目录
app.use(express.static(__dirname + '/'));

// 允许跨域
app.all('*', function(req, res, next) 
  console.log(req.headers.origin)
  console.log(req.environ)
  res.header("Access-Control-Allow-Origin", req.headers.origin);
  // res.header("Access-Control-Allow-Origin", '*');
  res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
  res.header("Access-Control-Allow-Credentials","true");
  res.header("X-Powered-By",' 3.2.1')
  if(req.method === "OPTIONS") res.send(200);/*让options请求快速返回*/
  else  next();
);


app.use('/router1', router1);
app.use('/router2', router2);
app.use('/router3', router3);
app.use('/test', testRouter);
app.use('/sqh', sqhIndex);
app.use('/klw', klwIndex);


http.createServer(app).listen(3000);

 

注意:

1. 需要将允许跨域的请求代码放在所有的路由前面,因为请求被express接受到的时候,拦截的顺序是根据自己写的代码路由顺序决定的,一旦满足拦截条件,如果不执行next()方法,则就不会继续把请求发送给下一个路由拦截器。

2. `  res.header("Access-Control-Allow-Origin", req.headers.origin);`不能使用 *, 否则协议不通过

 

 

以上是关于nodejs express 允许跨域设置的主要内容,如果未能解决你的问题,请参考以下文章

关于AngularJS中$http跨域 与 nodejs接收跨域请求(使用express-session,body-parser)的设置

express设置允许跨域访问该服务.

利用angular4和nodejs-express构建一个简单的网站——设置跨域访问和安装基本依赖构建数据库

nodejs设置允许跨域

nodejs设置服务端允许跨域

nodejs 跨域设置cookie