当前位置:   article > 正文

【初学者】Vue使用axios向Node.js发起请求以及跨域问题的解决_axios和nodejs

axios和nodejs

目录

项目创建

代码

解决跨域问题

几个注意点

运行结果展示


axios官方文档起步 | Axios 中文文档 | Axios 中文网

项目创建

本文实例用到的两个项目,分别命名为server和vue-axios。

server是node.js项目,创建方式:

  1. # 创建server并打开位于该文件夹下的终端
  2. # 初始化项目
  3. npm init
  4. # 然后输入包名 server,然后无脑回车即可
  5. # 安装模块包
  6. npm install express --save
  7. # 创建文件 index.js
  8. # 开启服务器,注意每次修改index.js都要重新开启才生效!!
  9. node index.js

vue-axios是vue3项目,我使用vite创建,当然你也可以用vue-cli:

  1. # 进入根目录终端 使用vite创建项目 名称为vue-axios
  2. npm create vite@latest vue-axios
  3. cd vue-axios
  4. npm install
  5. # 使用npm安装axios插件
  6. # 也可以使用yarn等等,详见开头的官方文档
  7. npm install axios
  8. # 运行
  9. npm run dev

 以上步骤都完成后,接下来以三个例子说明axios请求数据,分别是get、post请求本地服务器,还有向外部服务器(以斗鱼为例)发起请求。

代码

1. vue-axios/src/App.vue

  1. <template>
  2. <button @click="getReq">发送一个 get 请求</button>
  3. <button @click="postReq">发送一个 post 请求</button>
  4. <button @click="douClick">请求斗鱼服务器</button>
  5. <!-- 以下是从斗鱼服务器请求数据的展示 -->
  6. <ul>
  7. <li v-for="item in state.dy" :key="item.room_id">
  8. <img :src="item.room_src" alt="">
  9. <h4>{{ item.room_name }}</h4>
  10. </li>
  11. </ul>
  12. </template>
  13. <script setup>
  14. // 导入
  15. import axios from 'axios';
  16. import { reactive } from "vue";
  17. let state = reactive({});
  18. // 发送 get 请求
  19. let getReq = () =>{
  20. axios
  21. .get("http://localhost:3030/getUser?name=张三")
  22. .then(function (response){
  23. // 处理成功的情况
  24. console.log(response.data)
  25. })
  26. .catch(function (error){
  27. // 请求失败
  28. console.log(error);
  29. })
  30. .then(function() {
  31. // 总是会执行
  32. })
  33. }
  34. // 发送 post 请求
  35. let postReq =() =>{
  36. let data ={
  37. name:"李四"
  38. };
  39. axios.post('http://localhost:3030/postUser', data)
  40. .then(function (response) {
  41. console.log(response);
  42. })
  43. .catch(function (error) {
  44. console.log(error);
  45. });
  46. }
  47. let douClick = ()=>{
  48. // http://open.douyucdn.cn/api/RoomApi/live
  49. axios.get('/api/RoomApi/live')
  50. .then((res)=>{
  51. console.log(res.data.data);
  52. state.dy = res.data.data;
  53. })
  54. .catch((error)=>{
  55. console.log(error);
  56. })
  57. .then(()=>{
  58. })
  59. }
  60. </script>
  61. <style scoped>
  62. </style>

2. server/index.js

  1. // 服务器入口文件
  2. // nodejs里用require来进行导入一个模块的函数
  3. const express = require('express')
  4. // 通过 express 创建一个应用对象app
  5. const app = express()
  6. // 解决post请求获取请求体的问题
  7. app.use(express.json());
  8. app.use(express.urlencoded({
  9. extended: true
  10. }))
  11. app.get('/getUser',(req,res)=>{
  12. // 在这里是处理接口的方法,可以在数据库中查询内容
  13. console.log(req.query);
  14. // 解决跨域问题
  15. res.set("Access-Control-Allow-Origin","*");
  16. // res.send 将数据发送给前端
  17. res.send({
  18. name: req.query.name,
  19. age: 18,
  20. sex:true
  21. })
  22. })
  23. app.post('/postUser',(req,res)=>{
  24. console.log(req.body);
  25. // 解决跨域问题
  26. res.set("Access-Control-Allow-Origin","*");
  27. res.send({
  28. name:'李四',
  29. age: 11
  30. })
  31. })
  32. app.listen('3030',()=>{
  33. // localhost 本机地址
  34. // 127.0.0.1 本机ip
  35. console.log('服务器开启成功,地址');
  36. })

解决跨域问题


在前端解决:

 修改vue文件根目录里的vue-axios/vite.config.js(如果是用vue-cli创建的就是vue.config.js

其中'/api'是你要访问的服务器api,在此处定义后,你axios里对这个api发起的请求就不会出现跨域问题。

 

  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. // https://vitejs.dev/config/
  4. export default defineConfig({
  5. plugins: [vue()],
  6. server:{
  7. proxy:{
  8. '/api':'http://open.douyucdn.cn/'
  9. }
  10. }
  11. })

如果是vue.config.js是这样写的的

devServer: {
        proxy: {
            '/api': {
                target: 'http://localhost:8081/api',    // 你自己的api接口地址
                changeOrigin: true,
                ws: true,
                pathRewrite: {
                    '^/api': '',  
                }
            }
        }
    }

原文链接:https://blog.csdn.net/qq_26780317/article/details/119647250


在服务器解决:

就是在每个请求方法里都加上这一句:

res.set("Access-Control-Allow-Origin","*");

这些方法发起的请求就不会出现跨域问题。

 

 

几个注意点

(1)vue文件要记得在使用axios的代码之前导入axios。

(2)发送post请求前需要URLSearchParams对数据进行处理,否则就算解决了跨域问题也无法得到响应。

 

报错如下:

Access to XMLHttpRequest at。。。has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

 

 (3)向本地服务器发起请求,前端和服务器项目都要保持运行状态,修改了服务器项目记得要重新运行,而修改了前端文件只需要刷新页面即可,向外部服务器发起请求要保持你电脑联网,否则报500错误。

运行结果展示

 

 

 

 

 

 


over~~~你学到了吗?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/104351
推荐阅读
相关标签