我们有一个客户端api调用,需要将一个帖子作为表单数据发送。当我们通过Chrome的Postman扩展程序运行调用时,它会在我们指定表单数据时成功运行,如果我们指定x-www-form-urlencoded,则会返回错误。这是预期的。
然而,尝试使用"请求"在node.js中运行时npm包处理帖子我们继续收到来自api的错误消息,遗憾的是没有给出具体的错误信息。但我们确实看到请求标头对象在出现时看起来像这样:
_header:' POST / api / client / coupon / add HTTP / 1.1 \ r \ n授权:基本[auth string redacted] \ r \ nhost: beta1.client.com \ r \ ncontent型: 应用程序/ x-WWW窗体-urlencoded \ r \ ncontent长度: 172 \ r \ nConnection:keep-alive \ r \ n \ r \ n',
我们的Node.js代码如下:
//Create the coupon
var coupon = { code: "abcde1234"),
discount: "33",
type: "percent"
}
var request = require('request');
request.post(
{
url: "https://beta1.client.com/api/coupon/add",
headers: {
"authorization": auth,
"content-disposition": "form-data; name='data'"
},
form: coupon
},
function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
}
);
我想知道为什么内容类型标题继续阅读" application / x-www-form-urlencoded"当我们提供“表格 - 数据”的内容处理时。对我来说,似乎我可以删除它应该工作的content-type头属性 - 但是如何做到这一点?
任何见解都将不胜感激。
答案 0 :(得分:1)
最后,我们使用了这里找到的表单数据包:https://www.npmjs.com/package/form-data
我们的代码现在看起来像这样:
//create coupon json and stringify it
var coupon = {
coupon: {
code: couponCode,
discount: discountPercentage,
type: 'percent',
product: productId,
times: 1,
expires: couponExpiresDt
}
};
var couponString = JSON.stringify(coupon);
//create form-data object to be posted to client api
var FormData = require('form-data');
var couponForm = new FormData();
couponForm.append('data', couponString);
//create submission options for the post
var submitOptions = {
hostname:config.client_api_host,
path:'/api/2/coupon/add',
auth:auth,
protocol:'https:'
};
//submit the coupon/add post request
couponForm.submit(submitOptions, function(err, res) {
res.resume();
if (err) {
callback(err);
} else if (res.statusCode != 200) {
callback(new Error('API createDiscount post response error:', res.statusCode));
} else {
logger.log('info', "coupon code " + couponCode + " has apparently been created");
callback(null, {coupon_code: couponCode, expires: couponExpiresDt});
}
});