Vue.js 和 Express 提供了两种可以支持跨域的方式。
- 首先是 Vue.js 的方式,对于不支持跨域的服务器端的请求,客户端并不能配置影响到服务器端的代码。如果需要完成该功能,可以使用 vue-resorce 的 jsonp() 方法,具体
请求代码如下:
this.$http.jsonp('/someUrl', [data], [options]).then (successCallback, errorCallback);
- 注意 : jsonp() 不能发送 post 请求 ,不管是否跨域, 只要用 jsonp() 方式则该请求一定是 get 方式的,因为本质是 script 方式加载的。
使用 jsonp() 方式非常麻烦。
- 另一种方式需要更改 Express 编写的服务器代码,在 app.js 中进行全路由的配置,具体的跨域代码如下:
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, yourHeaderFeild');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
if(req.method == 'OPTIONS') {
res.send(200);
} else {
next();
}
});
- 注意:此代码需要在所有路由配置之前执行,否则代码之前定义的路由不支持此跨域的头部设置。如果不需要所有路由都支持跨域,也可以在单个路由中配置相关信息。