Vue.js 是一个用于构建用户界面的渐进式JavaScript框架。它主要关注的是视图层(UI组件)和允许开发人员使用声明式方式编写可重用的 UI 和交互式组件。
Laravel 是一个基于 PHP 的全栈 Web 应用框架,它提供了丰富的功能来简化常见的 Web 开发任务,如路由、会话管理、缓存和身份验证等。
原因:浏览器的同源策略限制了不同源之间的请求。
解决方法:
fruitcake/laravel-cors
包来设置 CORS 头部。// 安装包
composer require fruitcake/laravel-cors
// 在 app/Http/Kernel.php 中注册中间件
protected $middleware = [
// ...
\Fruitcake\Cors\HandleCors::class,
];
// 配置 config/cors.php
return [
'paths' => ['api/*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,
];
vue-cli
提供的代理功能。// vue.config.js
module.exports = {
devServer: {
proxy: {
'/api': {
target: 'http://localhost:8000', // Laravel 后端地址
changeOrigin: true,
pathRewrite: { '^/api': '' },
},
},
},
};
// routes/api.php
Route::get('/products', function () {
return response()->json([
['id' => 1, 'name' => 'Product 1'],
['id' => 2, 'name' => 'Product 2'],
]);
});
// src/components/ProductList.vue
<template>
<div>
<ul>
<li v-for="product in products" :key="product.id">{{ product.name }}</li>
</ul>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
products: [],
};
},
mounted() {
axios.get('/api/products')
.then(response => {
this.products = response.data;
})
.catch(error => {
console.error('There was an error!', error);
});
},
};
</script>
领取专属 10元无门槛券
手把手带您无忧上云