http.get(url[, options][, callback])
url
<string> | <URL>options
<Object> 接受与http.request()
相同的options
,但method
始终设置为GET
。 从原型继承的属性将被忽略。callback
<Function>- 返回: <http.ClientRequest>
由于大多数请求是没有正文的 GET 请求,因此 Node.js 提供了这个便捷的方法。
此方法与 http.request()
的唯一区别在于,它将方法设置为 GET 并自动调用 req.end()
。
因为 http.ClientRequest
章节所述的原因,回调必须注意消费响应数据。
callback
使用单个参数(http.IncomingMessage
的实例)调用。
获取 JSON 的示例:
http.get('http://nodejs.org/dist/index.json', (res) => {
const { statusCode } = res;
const contentType = res.headers['content-type'];
let error;
// 任何 2xx 状态码都表示成功响应,但这里只检查 200。
if (statusCode !== 200) {
error = new Error('Request Failed.\n' +
`Status Code: ${statusCode}`);
} else if (!/^application\/json/.test(contentType)) {
error = new Error('Invalid content-type.\n' +
`Expected application/json but received ${contentType}`);
}
if (error) {
console.error(error.message);
// 消费响应数据以释放内存
res.resume();
return;
}
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
try {
const parsedData = JSON.parse(rawData);
console.log(parsedData);
} catch (e) {
console.error(e.message);
}
});
}).on('error', (e) => {
console.error(`Got error: ${e.message}`);
});
url
<string> | <URL>options
<Object> Accepts the sameoptions
ashttp.request()
, with themethod
always set toGET
. Properties that are inherited from the prototype are ignored.callback
<Function>- Returns: <http.ClientRequest>
Since most requests are GET requests without bodies, Node.js provides this
convenience method. The only difference between this method and
http.request()
is that it sets the method to GET and calls req.end()
automatically. The callback must take care to consume the response
data for reasons stated in http.ClientRequest
section.
The callback
is invoked with a single argument that is an instance of
http.IncomingMessage
.
JSON fetching example:
http.get('http://nodejs.org/dist/index.json', (res) => {
const { statusCode } = res;
const contentType = res.headers['content-type'];
let error;
// Any 2xx status code signals a successful response but
// here we're only checking for 200.
if (statusCode !== 200) {
error = new Error('Request Failed.\n' +
`Status Code: ${statusCode}`);
} else if (!/^application\/json/.test(contentType)) {
error = new Error('Invalid content-type.\n' +
`Expected application/json but received ${contentType}`);
}
if (error) {
console.error(error.message);
// Consume response data to free up memory
res.resume();
return;
}
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
try {
const parsedData = JSON.parse(rawData);
console.log(parsedData);
} catch (e) {
console.error(e.message);
}
});
}).on('error', (e) => {
console.error(`Got error: ${e.message}`);
});