• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

vue2+node.js后端配合express框架实现前后端本地联调

武飞扬头像
Pumpkinz
帮助1

1.创建vue2项目 略

2.vue2项目结构如下

学新通

 3.vue中安装依赖

qs ,elementui, axios   请自行安装

4.main.js

  1.  
    import Vue from 'vue'
  2.  
    import App from './App.vue'
  3.  
     
  4.  
    Vue.config.productionTip = false
  5.  
    import ElementUI from 'element-ui';
  6.  
    // import qs from 'qs'
  7.  
    // Vue.use(qs)
  8.  
    import 'element-ui/lib/theme-chalk/index.css';
  9.  
    Vue.use(ElementUI);
  10.  
     
  11.  
    new Vue({
  12.  
    render: h => h(App),
  13.  
    }).$mount('#app')

5.封装axios 以及代理配置

创建如下图 的3个js文件↓

学新通

request.js↓

  1.  
    /**** request.js ****/
  2.  
    // 导入axios
  3.  
    import axios from 'axios'
  4.  
    // 使用element-ui Message做消息提醒
  5.  
    import { Message} from 'element-ui';
  6.  
    //1. 创建新的axios实例,
  7.  
    const service = axios.create({
  8.  
    // 公共接口--这里注意后面会讲
  9.  
    baseURL: process.env.BASE_API,
  10.  
    // 超时时间 单位是ms,这里设置了3s的超时时间
  11.  
    timeout: 3 * 1000
  12.  
    })
  13.  
    // 2.请求拦截器
  14.  
    service.interceptors.request.use(config => {
  15.  
    //发请求前做的一些处理,数据转化,配置请求头,设置token,设置loading等,根据需求去添加
  16.  
    config.data = JSON.stringify(config.data); //数据转化,也可以使用qs转换
  17.  
    config.headers = {
  18.  
    'Content-Type':'application/json' //配置请求头
  19.  
    }
  20.  
    //如有需要:注意使用token的时候需要引入cookie方法或者用本地localStorage等方法,推荐js-cookie
  21.  
    //const token = getCookie('名称');//这里取token之前,你肯定需要先拿到token,存一下
  22.  
    //if(token){
  23.  
    //config.params = {'token':token} //如果要求携带在参数中
  24.  
    //config.headers.token= token; //如果要求携带在请求头中
  25.  
    //}
  26.  
    return config
  27.  
    }, error => {
  28.  
    Promise.reject(error)
  29.  
    })
  30.  
     
  31.  
    // 3.响应拦截器
  32.  
    service.interceptors.response.use(response => {
  33.  
    //接收到响应数据并成功后的一些共有的处理,关闭loading等
  34.  
     
  35.  
    return response
  36.  
    }, error => {
  37.  
    /***** 接收到异常响应的处理开始 *****/
  38.  
    if (error && error.response) {
  39.  
    // 1.公共错误处理
  40.  
    // 2.根据响应码具体处理
  41.  
    switch (error.response.status) {
  42.  
    case 400:
  43.  
    error.message = '错误请求'
  44.  
    break;
  45.  
    case 401:
  46.  
    error.message = '未授权,请重新登录'
  47.  
    break;
  48.  
    case 403:
  49.  
    error.message = '拒绝访问'
  50.  
    break;
  51.  
    case 404:
  52.  
    error.message = '请求错误,未找到该资源'
  53.  
    // window.location.href = "https://blog.csdn.net/NotFound"
  54.  
    break;
  55.  
    case 405:
  56.  
    error.message = '请求方法未允许'
  57.  
    break;
  58.  
    case 408:
  59.  
    error.message = '请求超时'
  60.  
    break;
  61.  
    case 500:
  62.  
    error.message = '服务器端出错'
  63.  
    break;
  64.  
    case 501:
  65.  
    error.message = '网络未实现'
  66.  
    break;
  67.  
    case 502:
  68.  
    error.message = '网络错误'
  69.  
    break;
  70.  
    case 503:
  71.  
    error.message = '服务不可用'
  72.  
    break;
  73.  
    case 504:
  74.  
    error.message = '网络超时'
  75.  
    break;
  76.  
    case 505:
  77.  
    error.message = 'http版本不支持该请求'
  78.  
    break;
  79.  
    default:
  80.  
    error.message = `连接错误${error.response.status}`
  81.  
    }
  82.  
    } else {
  83.  
    // 超时处理
  84.  
    if (JSON.stringify(error).includes('timeout')) {
  85.  
    Message.error('服务器响应超时,请刷新当前页')
  86.  
    }
  87.  
    error.message = '连接服务器失败'
  88.  
    }
  89.  
     
  90.  
    Message.error(error.message)
  91.  
    /***** 处理结束 *****/
  92.  
    //如果不需要错误处理,以上的处理过程都可省略
  93.  
    return Promise.resolve(error.response)
  94.  
    })
  95.  
    //4.导入文件
  96.  
    export default service

 http.js

  1.  
    /**** http.js ****/
  2.  
    // 导入封装好的axios实例
  3.  
    import request from './request'
  4.  
     
  5.  
    const http ={
  6.  
    /**
  7.  
    * methods: 请求
  8.  
    * @param url 请求地址
  9.  
    * @param params 请求参数
  10.  
    */
  11.  
    get(url,params){
  12.  
    const config = {
  13.  
    method: 'get',
  14.  
    url:url
  15.  
    }
  16.  
    if(params) config.params = params
  17.  
    return request(config)
  18.  
    },
  19.  
    post(url,params){
  20.  
    const config = {
  21.  
    method: 'post',
  22.  
    url:url
  23.  
    }
  24.  
    if(params) config.data = params
  25.  
    return request(config)
  26.  
    },
  27.  
    put(url,params){
  28.  
    const config = {
  29.  
    method: 'put',
  30.  
    url:url
  31.  
    }
  32.  
    if(params) config.params = params
  33.  
    return request(config)
  34.  
    },
  35.  
    delete(url,params){
  36.  
    const config = {
  37.  
    method: 'delete',
  38.  
    url:url
  39.  
    }
  40.  
    if(params) config.params = params
  41.  
    return request(config)
  42.  
    }
  43.  
    }
  44.  
    //导出
  45.  
    export default http

api.js↓

  1.  
    import request from "../utils/request.js";
  2.  
    // import qs from "qs";
  3.  
     
  4.  
    const baseUrl = '/api/test'
  5.  
     
  6.  
     
  7.  
    // get ---可以传参数 也可以不传入参数
  8.  
    export function authLogout(params) {
  9.  
    return request({
  10.  
    url: baseUrl "/authLogout",
  11.  
    method: "get",
  12.  
    params:params
  13.  
    });
  14.  
    }
  15.  
     
  16.  
    // getCode ------必须按照格式传入参数
  17.  
    export function authCodeLogin(params) {
  18.  
    return request({
  19.  
    url: baseUrl "/authCodeLogin" '/' params.code '/' params.name,
  20.  
    method: "get",
  21.  
    });
  22.  
    }
  23.  
    //post
  24.  
    export function getUserInfo(params) {
  25.  
    return request({
  26.  
    url: baseUrl "/getUserInfo",
  27.  
    method: "post",
  28.  
    data:params
  29.  
    });
  30.  
    }

配置代理vue.config.js

  1.  
    const { defineConfig } = require('@vue/cli-service')
  2.  
    module.exports = defineConfig({
  3.  
    transpileDependencies: true,
  4.  
    devServer: {
  5.  
    // host: 'localhost', // 本地的IPv4地址
  6.  
    // port: '8080', // 默认端口为8080,此端口冲突,也会出现代理异常的情
  7.  
    proxy: {
  8.  
     
  9.  
    '/api': {
  10.  
    target: 'http://xxxxxx请自己修改成对应后端的ipxxxxxx:3000',
  11.  
    changeOrigin: true,
  12.  
    pathRewrite:{"^/api":"/api"}
  13.  
    },
  14.  
     
  15.  
    }
  16.  
    },
  17.  
    })

helloworld↓(调用接口的页面)

其中有三个按钮 分别是:↓

学新通

 get是 get请求(可以传参或者不传参)

getCode 是 get请求(必须传对应格式的参数)

post 可以传参

  1.  
    <template>
  2.  
    <div class="hello">
  3.  
    <button @click="getModellogin('get')">get</button>
  4.  
    <button @click="getModellogin('getCode')">getCode</button>
  5.  
    <button @click="getModellogin('post')">post</button>
  6.  
    </div>
  7.  
    </template>
  8.  
     
  9.  
    <script>
  10.  
    import { getUserInfo, authLogout, authCodeLogin } from "@/api/api.js";
  11.  
    export default {
  12.  
    name: "HelloWorld",
  13.  
    methods: {
  14.  
    getModellogin(code) {
  15.  
    let params = {
  16.  
    code: code,
  17.  
    name:"zhangsan"
  18.  
    };
  19.  
    switch (code) {
  20.  
    case "get":
  21.  
    authLogout(params).then((res) => {
  22.  
    console.log(1,res);
  23.  
    });
  24.  
    break;
  25.  
    case "getCode":
  26.  
    authCodeLogin(params).then((res) => {
  27.  
    console.log(2,res);
  28.  
    });
  29.  
    break;
  30.  
    case "post":
  31.  
    getUserInfo(params).then((res) => {
  32.  
    console.log(3,res);
  33.  
    });
  34.  
    break;
  35.  
    }
  36.  
    },
  37.  
    },
  38.  
    };
  39.  
    </script>
  40.  
     

接下来是node.js的搭建 

  1. 安装node.js(此文章省略)
  2. 安装express
  3.     npm init
        npm i express -D
  4. 项目结构如下↓
  5. 学新通

server.js↓

  1.  
    // 引入express模块
  2.  
    var express = require('express');
  3.  
    // 获取服务实力对象
  4.  
    var app = express();
  5.  
    // const bodyParser = require('body-parser');
  6.  
     
  7.  
    app.use(express.urlencoded());
  8.  
    // get ---可以传参数 也可以不传入参数
  9.  
    app.get('/api/test/authLogout', (req, res, next) => {
  10.  
    console.log("req.query",req.query)
  11.  
    res.end("hello express----get1")
  12.  
    })
  13.  
     
  14.  
    // getCode ------必须按照格式传入参数
  15.  
    app.get('/api/test/authCodeLogin/:code/:name', (req, res, next) => {
  16.  
    console.log("req.params",req.params)
  17.  
    res.end("hello express----get2")
  18.  
    })
  19.  
     
  20.  
    app.use(express.json())
  21.  
    // post
  22.  
    app.post('/api/test/getUserInfo', (req, res) => {
  23.  
    console.log("req.body",req.body)
  24.  
    res.end('hello express----post');
  25.  
    });
  26.  
     
  27.  
     
  28.  
     
  29.  
    // 监听端口
  30.  
    app.listen(3000,err => {
  31.  
    if(!err) console.log('服务器已启动 端口号3000:::')
  32.  
    })

6.启动服务 在终端中  node server.js

学新通

 3.使用 

3.1点击第一个get按钮(第一种get传参方式 推荐使用)

前台:

学新通

 可以观察到 参数被拼接到url后面

后台↓ 

能够拿到前端请求的数据 

学新通

3.2点击第二个get按钮 (另外一种传参方式(严格传参))

前台:↓  可以观察到 参数被拼接到url后面

学新通

 后台↓

学新通

3.3post请求

前台:↓

学新通

 后台:↓

学新通

这里涉及到几个难点 ,比如 两种get格式,前端怎么写?后端怎么写?,get,post请求,后端如何拿到前端传入的参数。针对这方面的内容可以参考 下一篇文章↓......

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggafck
系列文章
更多 icon
同类精品
更多 icon
继续加载