我有一个URL对象,我需要在node.js中使用http
模块发出请求。
通常我会使用:
const url = new URL('...'); // from third party module
http.request(url)
但我需要在请求中添加标头。
const url = new URL('...'); // from third party module
http.request({
hostname: url.hostname,
port: url.port,
path: url.path,
method: 'post'
headers: {...}
});
我猜测是否有一种方法可以将URL对象转换为选项对象,以避免使用遗留的url.parse(不建议使用文档本身)。
注意:虽然Legacy API尚未弃用,但它仅用于向后兼容现有应用程序。新的应用程序代码应该使用WHATWG API。
实际上,如何手动执行http.request
参数文档中所述的内容:
如果是URL对象,它将自动转换为普通选项对象。
如果我对URL对象使用Object.assign
,它会在创建的最终对象中公开一些内部,我找到的唯一解决方案是手动提取所需的属性......
这是一个设计缺陷还是我错过了什么?
答案 0 :(得分:0)
您可以将所有标题信息设为单独的选项
const options = {
hostname: 'www.google.com',
port: 80,
path: '/upload',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
&安培;把它传递给你的请求..
const req = http.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
// write data to request body
req.write(postData);
req.end();
说完我建议你使用axios或request这样的第三方npm套餐来制作获取,发布请求
Request是一个简化的HTTP客户端,可与Python的请求相媲美 图书馆。这个库比默认的http更加用户友好 模块,并被认为是几个社区的首选 年。
答案 1 :(得分:0)
自节点v10.9.0起,可以分别传递url(字符串或URL实例)和options参数。这是新的函数签名:
http.request(url[, options][, callback])
对于较早的版本,没有直接的方法来合并URL对象和选项。在后台,Node.js converts URL object to options object使用与您类似的方法。