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)的设置