zoukankan      html  css  js  c++  java
  • fetch基本使用

    搭建简易的服务器:

      ①新建express文件夹

      ②终端中执行 express -e 和 npm i

      ③在express/routes/user.js中定义login请求路径

        var express = require('express')
        var router = express.Router()
    
        router.get('/login', (req, res) => {
          let { username, password } = req.query
          console.log(username, password)
          if (username === 'admin' && password === 'admin') {
            res.json({
              code: 200,
              data: 'OK'
            })
          } else {
            res.json({
              code: 200,
              data: {
                info: '用户名或密码错误'
              }
            })
          }
        })
    
        router.post('/login', (req, res) => {
          let { username, password } = req.body
          console.log(username, password)
          if (username === 'admin' && password === 'admin') {
            res.json({
              code: 200,
              data: 'OK'
            })
          } else {
            res.json({
              code: 200,
              data: {
                info: '用户名或密码错误'
              }
            })
          }
        })
    
        module.exports = router
    View Code

      ④dev.config.js中配置跨域代理

      

      ⑤package.json中用supervisor替换原来的node,重启服务:npm start

        "scripts": {
          "start": "supervisor ./bin/www"
        },

    react中使用fetch:

      ①下载插件:npm i whatwg-fetch

      ②组件中引入和使用

        import { fetch as fetchPolyfill } from 'whatwg-fetch' // 起一个别名,防止和原生的fetch冲突

        fetch的第一个then方法中返回结果集,需要在这里对数据进行处理,设置希望返回的数据类型

        

          componentDidMount() {
            fetchPolyfill('/users/login?username=admin&password=admin')
              .then((res) => res.json())
              .then((data) => {
                console.log(data) // 这儿的data就是 express 中 res.json() 中的对象
              })
          }

      post请求:需要下载qs依赖,post请求需要设置method和headers,body参数需要用qs模块转为查询字符串

          fetchPolyfill('/users/login', {
            method: 'post',
            headers: {
              'content-type': 'application/x-www-form-urlencoded'
            },
            body: qs.stringify({ username: 'admin', password: 'admin' })
          })
            .then((res) => res.json())
            .then((data) => {
              console.log(data)
            })

    fetch封装:

      1、src下新建utils/requset.js:

    import { fetch as fetchPolyfill } from 'whatwg-fetch'
    import qs from 'qs'
    
    const get = (options) => {
      let str = '',
        path = ''
      if (options.data) {
        for (let key in options.data) {
          str += `&${key}=${options.data[key]}`
        }
      }
      path = options.url + '?' + str.slice(1)
      return fetchPolyfill(path, {
        headers: {
          ...options.headers,
          'content-type': 'application-json'
        },
        credentials: 'include'
      }).then((res) => res.json())
    }
    
    const post = (options) => {
      return fetchPolyfill(options.url, {
        method: 'post',
        headers: {
          ...options.headers,
          'content-type': 'application/x-www-form-urlencoded'
        },
        credentials: 'include',
        body: qs.stringify(options.data)
      }).then((res) => res.json())
    }
    
    export default {
      get,
      post
    }
    View Code

      2、引入和使用

        import request from './utils/request'
    
    
        async componentDidMount() {
          let res = await request.get({
            url: '/users/login',
            data: {
              username: 'admin',
              password: 'admin'
            }
          })
          console.log(res, 'get')
    
          request
            .post({
              url: '/users/login',
              data: {
                username: 'admin',
                password: 'admin'
              }
            })
            .then((data) => {
              console.log(data, 'post')
            })
        }

    fetch的特点:

      1、返回promise

      2、留给开发者足够的操作空间,可以自定义返回的数据类型:json、text、blob、arrayBuffer...

      3、fetch处理成果后不是直接将结果返回,第一个then方法中返回一个未处理的结果集,在这里解析数据,第二个then方法中获取数据

      4、默认不会携带cookie,需要设置 credentials: 'include'

       

  • 相关阅读:
    C# 中 枚举Enum 一些转换的方法整理
    qt creator源码全方面分析(3-8)
    qt creator源码全方面分析(3-7)
    qt creator源码全方面分析(3-6)
    qt creator源码全方面分析(3-5)
    qt creator源码全方面分析(3-4)
    qt creator源码全方面分析(3-3)
    qt creator源码全方面分析(3-2)
    精校版网络小说下载地址
    qt creator源码全方面分析(3)
  • 原文地址:https://www.cnblogs.com/wuqilang/p/14305513.html
Copyright © 2011-2022 走看看