当前位置:   article > 正文

umi request和mock(mock文件夹下的js文件)请求传递和接收参数_umi util/request.js

umi util/request.js

目录

utils/request.js

services/test.js

mock/test.js

拓展


utils/request.js

  1. const fetch = require('dva').fetch;
  2. const checkStatus = response => {
  3. if (response.status == 200) return response;
  4. throw { message: 'error' };
  5. };
  6. const parseJson = response => {
  7. const { statusText, status } = response;
  8. return response.json().then(res => {
  9. console.log('parsejson.res', res);
  10. return {
  11. data: res,
  12. status,
  13. success: true,
  14. };
  15. });
  16. };
  17. // 请求头需要加上,不然post请求,mock里接收不到参数
  18. const headers = {
  19. 'Accept': 'application/json',
  20. 'Content-Type': 'application/json'
  21. };
  22. export default (url, options) => {
  23. return fetch(url, {...options, headers})
  24. .then(checkStatus)
  25. .then(parseJson);
  26. };

services/test.js

get和delete请求传参形式相同

post和put请求传参形式相同

  1. import request from '../utils/request';
  2. var qs = require('qs');
  3. export const getBrand = params => {
  4. console.log('getBrand', { ...params });
  5. // get请求传参,参数要拼接在url后面
  6. // 此处的“ ? ”一定要加上
  7. // qs.stringify()会将参数转成 a='1'&b='2' 的形式,如果不使用qs库可手动转换
  8. return request('/api/brand?' + qs.stringify(params), {
  9. method: 'GET',
  10. });
  11. };
  12. export const deleteBrand = params => {
  13. // 同get请求
  14. return request('/api/brand?' + qs.stringify(params), {
  15. method: 'DELETE'
  16. })
  17. }
  18. export const updateBrand = params => {
  19. // post请求
  20. return request(`/api/brand`, {
  21. // 此处一定要JSON格式化,不然mock里同样接收不到数据
  22. body: JSON.stringify(params),
  23. method: 'POST',
  24. })
  25. }

mock/test.js

get请求接收参数用 req.query

post请求接收参数用 req.body

如果接收不到参数,要么没格式化数据,要么没加请求头;get和delete请求则还可能是“ ? ”没加

  1. export default {
  2. 'GET /api/brand': (req, res) => {
  3. /**
  4. * get请求接收参数用req.query
  5. * 接收url后的字符串解析出来的对象
  6. * username=zhangsan&password=123 { username:zhangsan }
  7. */
  8. let data = getBrandList(req.query);
  9. res.status(200).json(data);
  10. },
  11. 'POST /api/brand': (req, res) => {
  12. /**
  13. * post请求接收参数用req.body
  14. */
  15. const { record } = req.body;
  16. updateBrand(record);
  17. res.json(200);
  18. }
  19. };

拓展

response和request参数的说明 链接(文章最下面的续篇):dva中对于mock的简单使用(另附umi中的使用方法和自己手动fetch发送请求方法,还有mock中response和request参数的配置)

  1. Request
  2. req.baseUrl 基础路由地址
  3. req.body post发送的数据解析出来的对象
  4. req.cookies 客户端发送的cookies数据
  5. req.hostname 主机地址 去掉端口号
  6. req.ip 查看客户端的ip地址
  7. req.ips 代理的IP地址
  8. req.originalUrl 对req.url的一个备份
  9. req.params 在使用/:id/:name 匹配params
  10. req.path 包含请求URL的路径部分
  11. req.protocol http 或https协议
  12. req.query 查询字符串解析出来的对象 username=zhangsan&password=123 { username:zhangsan }
  13. req.route 当前匹配的路由 正则表达式
  14. req.params 获取路由匹配的参数
  15. req.get 获取请求header里的参数
  16. req.is 判断请求的是什么类型的文件
  17. req.param(key名称) 用来获取某一个路由匹配的参数
  18. Response
  19. res.headersSent 查看http响应是否响应了http头
  20. res.append(名称,value) 追加http响应头
  21. res.attachment(文件路径) 响应文件请求
  22. res.cookie() 设置cookie
  23. res.setHeader('Content-Type','text/html;charset=utf8')
  24. res.append('Content-Type','text/html;charset=utf8')
  25. res.append('hehe','1008')
  26. res.append('haha','1008')
  27. res.attachment('./xx.zip') //Content-Disposition: attachment; filename="xx.zip"
  28. res.clearCookie(cookiename) 删除cookie
  29. res.cookie('zhangsan','lisi') 设置cookie
  30. res.cookie('zhangsan1','lisi2',{
  31. maxAge:900000,
  32. httpOnly:true,
  33. path: '/admin',
  34. secure: true,
  35. signed:true
  36. })
  37. res.clearCookie('zhangsan')
  38. res.download(文件的path路径) 跟attachment类似 用来处理文件下载的 参数是文件地址
  39. res.end http模块自带的
  40. res.format()协商请求文件类型 format匹配协商的文件类型
  41. res.format({
  42. 'text/plain': function(){
  43. res.send('hey');
  44. },
  45. 'text/html': function(){
  46. res.send('<p>hey</p>');
  47. },
  48. 'application/json': function(){
  49. res.send({ message: 'hey' });
  50. },
  51. 'default': function() {
  52. // log the request and respond with 406
  53. res.status(406).send('Not Acceptable');
  54. }
  55. });
  56. res.get('key') 获取响应header数据
  57. res.json() 返回json数据 会自动设置响应header Content-type 为json格式 application/json
  58. res.json({
  59. xx:100
  60. })
  61. res.json({
  62. xx:100
  63. })
  64. jsonp 利用的就是浏览器加载其他服务器的文件不会存在跨域问题
  65. ajax请求就会有跨域问题
  66. res.setHeader('Content-Type','text/javascript;charsert=utf8')
  67. res.end(`typeof ${req.query.callback} == 'function' ? ${req.query.callback}({aa:100}):null`)
  68. res.jsonp({aaa:100})
  69. 重定向 把访问的地址跳转到另一个地址上
  70. res.redirect(301,'/api/aes')
  71. express jade
  72. res.render('index',{title:"hehe",test:"23"})
  73. res.send('') 发送数据 可以是任意类型的数据
  74. res.sendFile() 发送文件的
  75. res.sendStatus(200) 设置发送时的状态码
  76. res.set('Content-Type', 'text/plain') //设置响应header
  77. res.status(200) // 设置状态码
  78. res.type('') // 直接设置响应的文件类型
  79. res.type('pdf')
  80. res.send({aa:100})
  81. res.end('ok')
  82. res.end({aa:100})
  83. res.end('你好')
  84. res.end(req.get('Accept-Language'))
  85. res.json({
  86. is:req.is('text/html')
  87. })
  88. res.json({
  89. type:req.baseUrl,
  90. hostname:req.hostname,
  91. // ip:req.ip,
  92. // ips:req.ips,
  93. // route:req.route,
  94. ct:req.get('Accept'),
  95. cs:'22'
  96. })

 

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

闽ICP备14008679号