资讯专栏INFORMATION COLUMN

Vue2从0到1(五):使用nodejs+koa2和axios实现前后台数据通信

legendmohe / 798人阅读

摘要:前面讲了环境的搭建用打包的使用的使用以及组件化及组件间传值下面讲一下使用提供接口,访问接口,前后端数据通信的相关内容。

前面讲了环境的搭建用webpack打包vue,Vue-router,vuex的使用的使用以及Vue组件化及组件间传值 下面讲一下使用nodejs+koa提供接口,axios访问接口,前后端数据通信的相关内容。 11.使用nodejs+koa2提供后台接口

npm install koa koa-router --save-dev

在根目录下下新建server/index.js文件index.js:

    const Koa = require("koa");
    const router = require("koa-router")();
    const app = new Koa();
    router.get("/", (ctx, next)=> {
        ctx.response.body = "111"
    });

    app
        .use(router.routes())
        .use(router.allowedMethods());

    app.listen(3000,()=>{
       console.log("server is start at port 3000")
    });
    

package.json里面设置命令:"server":"node server index.js"
启动服务:npm run server
浏览器里面访问localhost/3000可看到返回值

12.设置koa允许前端跨域访问

使用koa2-cors设置跨域
安装npm install koa2-cors --save-dev

   ...
    app.use(cors({
        origin: function (ctx) {
            if (ctx.url === "/test") {
                return false;
            }
            return "http://localhost:9001";
        },
        exposeHeaders: ["WWW-Authenticate", "Server-Authorization"],
        maxAge: 5,
        credentials: true,
        allowMethods: ["GET", "POST", "DELETE"],
        allowHeaders: ["Content-Type", "Authorization", "Accept"],
    }));
    ...
13 使用axios访问后台接口

安装axios:

   npm install axios --save

在根目录新建server/request.js
封装一个request函数,所有的请求都通过request函数,便于对于请求统一处理

   export default {
    post(url, data) {
        return axios({
            method: "post",
            baseURL: BASE_URL,
            url,
            data: JSON.stringify(data),
            timeout: 10000,
            headers: {
                "X-Requested-With": "XMLHttpRequest",
                // "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
                "Content-Type":"application/json",
                // "Accept": "application/json",
                // "charset":"utf-8"
            }
        }).then(
            (response) => {
                return checkStatus(response)
            }
            ).then(
            (res) => {
                return checkCode(res)
            }
            ).catch((e)=>{
                console.log(e)
                return new Promise((resolve, reject) => {
                    reject(e);
                })
            })
    },
    get(url, params) {
        return axios({
            method: "get",
            baseURL: BASE_URL,
            url,
            params, // get 请求时带的参数
            timeout: 10000,
            headers: {
                "X-Requested-With": "XMLHttpRequest"
            }
        }).then(
            (response) => {
                return checkStatus(response)
            }
            ).then(
            (res) => {
                return checkCode(res)
            }
            )
    }
}

function checkStatus(response) {

// loading
// 如果http状态码正常,则直接返回数据
if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {
    return response
    // 如果不需要除了data之外的数据,可以直接 return response.data
}
// 异常状态下,把错误信息返回去
return {
    status: -404,
    msg: "网络异常"
}

}

function checkCode(res) {

// 如果code异常(这里已经包括网络错误,服务器错误,后端抛出的错误),可以弹出一个错误提示,告诉用户
if (res.status === -404) {
    let vue = new Vue;
    vue.$message({ type: "error", message:res.msg});
}
// if (res.data && (!res.data.success)) {
//     alert(res.data.error_msg)
// }
return res

}

调用:
import request from ".././request.js"; 
let {data} =await request.post(options.url,data1);
let {data} =await request.get(options.url,data1);
请注意这里踩了两个坑:
1.设置axios.defaults.withCredentials = true   //请求时带上cookie这样请求时才会带上cookie
2.设置"Content-Type":"application/json",并JSON.stringify(data),这样后台才能正确接收到数据
3.当设置请求时带上cookie时后端允许的跨域不能用"*"要说明协议+域名+端口[相关问题](https://segmentfault.com/q/1010000011878964?_ea=2792154)

请求数据效果图:

后面将讲一下element-ui的使用 代码托管于github 欢迎star

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89544.html

相关文章

  • vue+koa2+mongo前后端分离restful,配置部署

    摘要:前端项目使用搭建项目,这里就不发了安装和配置或加载。目录下文件修改来个请求,查看结果。 一。前端项目 1.使用vue-cli(vue2.0)搭建项目,这里就不发了. axios安装和配置 ~ npm install axios 1. main.js或app.js加载axios。 import axios from axios Vue.prototype.$axios =...

    miracledan 评论0 收藏0
  • vue+node+mongodb 搭建一个完整博客

    摘要:开发一个完整博客流程前言前段时间刚把自己的个人网站写完,于是这段时间因为事情不是太多,便整理了一下,写了个简易版的博客系统服务端用的是框架进行开发技术栈目录结构讲解的配置文件放置代码文件项目参数配置的文件日志打印文件项目依赖模块 Vue + Node + Mongodb 开发一个完整博客流程 前言 前段时间刚把自己的个人网站写完, 于是这段时间因为事情不是太多,便整理了一下,写了个简易...

    Miracle_lihb 评论0 收藏0
  • 基于Vue2.0+Vuex+Axios+NodeJs+Express+MySQL实现京东移动web商

    摘要:项目地址经过一个多月总算完成第一个版本前端架构页面结构原生框架基于脚手架进行搭建数据请求处理框架进行路由处理进行图片赖加载服务端架构选用进行后台开发中间件进行服务的配置,路由请求的处理官网中间件处理与数据库的通信中间件进行前端请求参 项目地址https://github.com/huangche00... 经过一个多月总算完成第一个版本 前端架构 页面结构(H5,CSS3,原生JS)...

    Neilyo 评论0 收藏0
  • 基于Vue2.0+Vuex+Axios+NodeJs+Express+MySQL实现京东移动web商

    摘要:项目地址经过一个多月总算完成第一个版本前端架构页面结构原生框架基于脚手架进行搭建数据请求处理框架进行路由处理进行图片赖加载服务端架构选用进行后台开发中间件进行服务的配置,路由请求的处理官网中间件处理与数据库的通信中间件进行前端请求参 项目地址https://github.com/huangche00... 经过一个多月总算完成第一个版本 前端架构 页面结构(H5,CSS3,原生JS)...

    lylwyy2016 评论0 收藏0

发表评论

0条评论

legendmohe

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<