nodejs express 允许跨越设置

为了模拟向后台发送请求,需要搭建一个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) {
    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("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);

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

猜你喜欢

转载自hbiao68.iteye.com/blog/2371293