function postRequest(host, port, path, postData) {
// let postDataStr = querystring.stringify(postData);
let postDataStr = JSON.stringify(postData);
let options = {
host: host,
port: port,
path: path,
method: 'POST',
headers: {
'Content-Type': 'application/json',
// 这样写有个坑 'Content-Length': postDataStr.length
'Content-Length': Buffer.byteLength(postDataStr,'utf8')
}
}
return new Promise(function (resolve, reject) {
let req = http.request(options, (res) => {
res.setEncoding('utf8');
var body = '';
res.on('data', (d) => body += d);
res.on('end', () => { resolve(body) });
});
req.on('error', (e) => { console.log('problem with request: ' + e.message) });
req.write(postDataStr);
req.end();
});
}
Content-Length是计算请求参数的字节数,而非字符数.而JSON.stringify(param).length返回的是字符数