nodejs + express + axios + vue 跨域问题

本文详细介绍了在使用Vue作为前端框架、axios进行请求、mongodb作为数据库、nodejs+express框架作为后端的情况下,如何解决前后端跨域问题。通过安装并配置cors插件或设置请求响应的header,实现http://localhost:8081与http://localhost:8085之间的跨域访问。

前后端跨域问题:

第一次写前端+数据库+后端这样从前到后流程的项目,经验不足,在网上借鉴了很多,终于有点点眉目。

前端框架:vue

请求:axios

数据库:mongodb

后端:nodejs + express框架

在项目过程中,遇到跨域提示,前端 http://localhost:8081 访问后端 http://localhost:8085 ,翻来覆去找了半天,试了网上的几种办法(后面会详说)都没有用

后来脑子里突然闪过一句话,就是这个,万恶由它引起:

将它注释掉就好啦。

写的时候知道这句话是解决跨域问题的,那为什么加上它反而报错了呢。我还真是没有百思而不得其解。

好啦,下面我记录一下我在网上搜到的其他解决跨域的办法,虽然解药不对我的症状,但我总觉得有一天会用到的。

1. 安装cors插件,因为我用的是express框架,所以这个办法用起来非常舒爽。

(1)安装cors: npm install cors express --save

(2) 然后在文件中引用:

         var cors = require('cors');

         var express = require('express');

         var server = express();

         server.use(cors());

 

2. 设置请求响应的header

 var express = require('express');

 express.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=="PTIONS") res.send(200);

     else next();

 });

### 使用 Vue、Node.js 和 MySQL 构建图书管理系统的指南 #### 项目结构概述 为了构建一个完整的图书管理系统,整个项目的架构可以分为前端部分和后端部分。前端采用 Vue.js 进行页面展示与交互逻辑编写;而后端则利用 Node.js 及其 Express 框架来处理业务请求,并通过 MySQL 存储书籍信息。 #### 后端服务搭建 在 `server` 文件夹内启动新的 Node.js 工程[^4]: ```bash mkdir server cd server npm init -y npm install express mysql body-parser cors ``` 接着定义路由接口用于增删改查操作,在此过程中需引入必要的模块并建立数据库连接池实例以便高效访问数据表中的记录。 ```javascript // 导入所需包 const express = require('express'); const bodyParser = require('body-parser'); const mysql = require('mysql'); // 创建应用程序对象 let app = express(); // 配置中间件解析 JSON 请求体 app.use(bodyParser.json()); // 设置资源共享策略(CORS),允许来自任何源的HTTP请求 app.use((req, res, next) => { res.header("Access-Control-Allow-Origin", "*"); res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept" ); next(); }); // 建立 MySQL 数据库链接池 var pool = mysql.createPool({ host: 'localhost', user: 'root', // 替换成自己的用户名 password: '', // 替换成自己的密码 database: 'library' // 替换成自己创建好的数据库名 }); ``` 针对每一种 CRUD (Create Read Update Delete) 动作分别实现对应的 API 接口函数... #### 前端界面设计 对于前端而言,则是在另一个独立的工作区里按照官方文档指引安装依赖项之后再着手于组件化视图的设计工作。这里推荐使用脚手架工具如 vue-cli 来简化这一过程: ```bash vue create frontend cd frontend npm run serve ``` 随后可以在 src/views 下新建 BookList.vue 组件负责渲染列表页内容,而 AddBookForm.vue 则用来呈现新增/编辑条目的对话框控件等等...与此同时还要记得调整 main.js 中关于全局状态管理器 Vuex 的配置选项以确保能够顺利调用远程 RESTful Web Service 获取最新资料更新UI显示效果. 最后就是把前后两端关联起来啦!借助 axios 或 fetch() 方法发起异步 HTTP 调用从而完成两者之间的通信协作机制建设。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值