所以我使用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中是否有内置功能来解析这个问题,还是需要“自己滚动”?
答案 0 :(得分:1)
FormData会将您的有效负载格式化为multipart/form-data
有效负载。但是,您要设置application/x-www-form-urlencoded
的内容类型标头。它们是完全不同的编码。因此,您将hapi的有效负载解析器与其正在接收的有效负载编码混淆。
删除该行:
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
它应该工作。