y***@163.com
y***@163.com
  • 发布:2018-11-27 17:16
  • 更新:2018-11-27 20:25
  • 阅读:2707

【报Bug】H5版本(其他版本未测) uni.request POST 方法无法发送 data

分类:uni-app

之前客户端使用 XMLHttpRequest 的方式发送请求没有问题, 现在使用 uni-app 写的客户端,打包成H5版本,服务器无法获取到data数据。 content-type 都是 application/json

2018-11-27 17:16 1 条评论 负责人:无 分享
已邀请:
Trust

Trust - 少说废话

提供一个测试demo以及网站的地址

使用 koa 搭建的最简服务
router/index.js

const router = require('koa-router')();  

router.post('/api/test', function(ctx, next) {  
    console.log('email:' + ctx.request.body.email)  

    ctx.body = {  
        status: true,  
        token: '123456'  
    }  
});  

module.exports = router;

app.js

const koa = require('koa');  
const router = require('koa-router')();  
const bodyParser = require('koa-bodyparser');  
const apiRouter = require('./router');  

const app = new koa();  

const index = router.get('/', ctx => {  
    ctx.response.body = 'hello world';  
}).routes();  

app.use(index);  
app.use(bodyParser());  
app.use(apiRouter.routes());  

app.listen(3000);
  • y***@163.com (作者)

    试了自己之前的好几个服务器, 都无法获取到 POST的data, 有php服务器 和 nodejs 服务器。 之前客户端使用的是 XMLHttpRequest 都没问题


    uni.request({

    url:'http://dev.wordxn.com/api_call/v1.0.0/AccountC/getAuthCodeByEmail',

    data: {

    email: 'aaaaa@126.com',

    type: 'register'

    },

    success(res) {

    console.log(res)

    },

    method: 'POST'

    })

    2018-11-27 17:22

  • y***@163.com (作者)

    GET 方法 能正常追加到 query string

    2018-11-27 17:23

  • Trust

    回复 y***@163.com:App和H5上测试,都是返回 -4

    2018-11-27 17:29

  • y***@163.com (作者)

    -4 是自定义的状态, api参数错误,或缺失, 因为没收到 POST 的data

    2018-11-27 17:34

  • Trust

    回复 y***@163.com:本地用 laravel 的测试接口,读取参数正常。建议检查一下服务器的配置,是不是没有处理好 OPTIONS 的情况,另外会不会有可能在 OPTIONS 的时候去取值了。

    2018-11-27 17:34

  • y***@163.com (作者)

    同样的服务器代码,我用各种可能的客户端发送请求, 就uni.request 无法收到data, 其他方法都能正常发送, 难度是我是我用的服务器框架不兼容你们的方式? 只能 呵呵了

    2018-11-27 17:40

  • y***@163.com (作者)

    uni-app 太难伺候啊, 等我有精力了好好调试那个用了好多年的服务器!!

    2018-11-27 17:42

  • Trust

    回复 y***@163.com:用的都是标准的协议,只不过是封装了一层规范可以方便使用。不存在什么特殊的地方,这边换了 Express 最简单的服务也可以正常取值。

    2018-11-27 17:47

  • y***@163.com (作者)

    node服务器我用的 koa2 框架 使用 koa-bodyparser 解析, 其他客户端发过来的都没问题呢, 就 uni-app 的收不到啊,

    2018-11-27 17:54

  • y***@163.com (作者)

    看了下论坛 好多遇到这个问题, 不光是 POST方法还有PUT, 安卓和IOS 都无法收到数据

    2018-11-27 18:14

  • Trust

    回复 y***@163.com:搭建了一个最简单的 koa 服务,同样获取正常。

    2018-11-27 18:37

  • Trust

    PUT 请求的问题,最新的 1.2 版本已经修复。

    2018-11-27 18:38

Trust

Trust - 少说废话

状态码 -4 是什么意思,还有个 debug 信息里面 method param miss:email 看起来是没有取到参数。
建议和后端联调一下,看具体的逻辑是怎么处理的。

H5 和 App 上测试是一样的

  • y***@163.com (作者)

    服务器是功能正常运行的, 客户端有 cocos creator , 和 H5 的都正常跑, 现在用 uni-app 无法获取到数据, 服务器已经处理了各种数据类型发送方式

    2018-11-27 17:31

y***@163.com

y***@163.com (作者)

这个服务器用的 thinkphp 框架已经获取参数了, 调试过了参数什么都没有

  • y***@163.com (作者)

    服务器是功能正常运行的, 客户端有 cocos creator , 和 H5 的都正常跑, 现在用 uni-app 无法获取到数据, 服务器已经处理了各种数据类型发送方式

    2018-11-27 17:30

y***@163.com

y***@163.com (作者)

难道用的不是同一个东西。。。。 我同样弄了个最简单的, post连消息都收不到了。。。诡异, 刚才还收到呢只是没参数。 用 postman 测试都正常

服务器端:
app.js

const koa = require('koa')  
const router = require('koa-router')()  
const bodyParser = require('koa-bodyparser')  

let app = new koa()  

//这里如果改成 get, 客户端用get请求就能收到 ,从 ctx.query 中获得 email  
router.post('/', async (ctx, next) => {  
  console.log('email:' + ctx.request.body.email)  
  ctx.body = 'hello'  
})  

app.use(bodyParser())  
app.use(router.routes())  

app.listen(3000)

客户端:

uni.request({  
  url: 'http://localhost:3000',   
   data: {  
     email: 'aaaaaa'  
    },  
    success: (res) => {  
       console.log(res.data)  
    },  
    method: 'POST'  
});  
  • y***@163.com (作者)

    确认了下这个是跨域被浏览器阻塞了, 加上 koa2-cors 中间件就可以了。

    2018-11-27 20:49

该问题目前已经被锁定, 无法添加新回复