补充: ionic-post的payload和form-data请求,nodejs express读取数据问题

用ionic3写前端, express后台读取数据,但是

req.body , req.params, req.query

都没有数据,打印出来都是{}


原因:

—–之前:

在前端请求数据的时候, 使用的是request payload
这里写图片描述

—–后台
app.post('/user/add',function(req,res,next) {
    console.log(req.body);
    console.log(req.params);
    console.log(req.query);

结果:
{}
{}
{}

—–之后

请求变成了,form-data
这里写图片描述

—–后台不变

结果:
{ username: ‘xl’, userpass: ‘xl’, minority: ‘0’ }
{}
{}

代码原因和改变:

let userUp = 'username=' + this.register.username + 
                 '&userpass=' + this.register.userpass + 
                 '&minority=' + (this.register.minority?0:1); 

let userD = {username: this.register.username,   
                 userpass: this.register.userpass, 
                 minority: (this.register.minority?0:1) };

let headers = new HttpHeaders();
headers.append('Content-type', 'application/x-www-form-urlencoded');

let header = {
        //headers: headers
        headers: {'Content-type': 'application/x-www-form-urlencoded'}
};

let regFail = this.alertCtrl.create({
          title: '用户注册失败',
          buttons: [{text: '知道了', role: 'cancle'}]
});

this.http.post(this.url + 'user/add', userD , header).toPromise()
    .then((res)=>{
      console.log(res);
      ......

其中的:

let header = {
        //headers: headers
        headers: {'Content-type': 'application/x-www-form-urlencoded'}
    };

PS: 这个HttpHeaders是angular新的header, 引用在
import { HttpClient, HttpHeaders } from '@angular/common/http';
可以点击这里查看API

总结:
1.使用headers: headers的效果 就是 payload形式,后台无法用query,body,params读取数据。
2.使用 headers: {‘’Content-type': 'application/.....'}传递数据就是form data形式, 用req.body获取数据。
我还没弄清楚为什么。。。搞死我了这个事情。(求大佬解答!!!)



附加一个问题是, 我搜了一下payload和form data的传输,说payload是原始的ajax请求,用流的方式进入。我试了一下网上说的监听流传输来获取传递的数据,然后console得到输出如下

test: == {"username":"xls","userpass":"xls","minority":0}

方法代码:

app.post('/user/add',function(req,res,next) {
    //这三个都是没有输出的
    console.log(req.body);
    console.log(req.params);
    console.log(req.query);

    // 输出如上面的test....
    var str = 'test:   == ';
    req.on('data', (dt)=>{
        str += dt;
    })
    req.on('end', (dt)=>{
        console.log(str);
    })
});

然后你自己再转换一下。



最后,补充一个:ionic 进行post请求的时候,传递数据的方式不同,对结果有影响。 比如:

let userUp = 'username=' + this.register.username + 
                 '&userpass=' + this.register.userpass + 
                 '&minority=' + (this.register.minority?0:1); 

let userD = {username: this.register.username,   
                 userpass: this.register.userpass, 
                 minority: (this.register.minority?0:1) };

this.http.post(this.url + 'user/add', userD , header).toPromise()......

userDuserUp 后台 req.body获取数据结果是不同的。直接用json的数据格式传递,在express获取数据的时候会给你再封装一次数据。你要捣腾两次。用类似get的方式(即&获取数据更方便)。

  1. 用userD: 结果(多封装了一层)
    { ‘{“username”:”23”,”userpass”:”43”,”minority”:0}’: ” }

  2. 用userUp: 结果
    { username: ‘xl’, userpass: ‘xl’, minority: ‘0’ }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值