在hapi中访问FormData

时间:2016-03-08 13:27:32

标签: node.js api rest multipartform-data hapijs

所以我使用XMLHttpRequest将chrome扩展中的一些数据发布到我的hapi api:

    var xhr =new XMLHttpRequest();
    xhr.open('POST', 'http://my-url.com/signup', true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    let params = {} ;
    params.username = "username";
    params.password = "password";
    xhr.send(JSON.stringify(params)); 
    xhr.onreadystatechange = function(response){...}

似乎工作得很好(通过分析chromes调试器中的网络选项卡)

现在,在服务器端,来自Express,我原本以为这些数据可以在req.params中找到,但是一些研究让我相信这应该有用:

    module.exports = [{
    method:'POST',
    path: '/signup',
    config:{
        payload:{
            output:'data',
            parse:true,
        },  
    handler:function(request, reply){
        console.log( `signing up user: ${request.payload.username}` );
        .....
    }
    }
}

然而打印

  

注册用户:undefined

并将其切换为打印字符串化的request.payload输出:

  

注册用户:{“{\”用户名\“:\”apa \“,\”密码\“:\”apa \“}”:“”}}

hapi中是否有内置功能来解析这个问题,还是需要“自己滚动”?

1 个答案:

答案 0 :(得分:1)

FormData会将您的有效负载格式化为multipart/form-data有效负载。但是,您要设置application/x-www-form-urlencoded的内容类型标头。它们是完全不同的编码。因此,您将hapi的有效负载解析器与其正在接收的有效负载编码混淆。

删除该行:

xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

它应该工作。