我想resolve()回傳{valid_to: cert.valid_to, statusCode, statusMessage}并且reject()應該回傳{error: -1, statusCode, statusMessage}。
題
當在不同的范圍內時statusCode,我該怎么做?statusMessage
const https = require('https');
(async () => {
const options = {
hostname: "github.com",
port: 443,
path: '/',
method: 'GET',
timeout: 1000
};
options.agent = new https.Agent(options);
let valid_to = await new Promise((resolve, reject) => {
const req = https.request({
...options, checkServerIdentity: function (host, cert) {
resolve(cert.valid_to);
}
}).on('error', error => {
reject(-2);
});
req.on("timeout", chunk => {
reject(-1);
});
req.on('response', response => {
console.log(response.statusCode);
console.log(response.statusMessage);
});
req.end();
}).catch(error => {
console.log(error);
return -3;
});
})();
uj5u.com熱心網友回復:
我會做這樣的事情。
編輯:您需要res.on('data')在https.request物件中指定。否則,超時將始終發出,因為流中沒有活動。
您可以在res.on("data")or中解決res.on("end"),這取決于您的用例。
res是一個 IncomingMessage 物件,由 http.ClientRequest 創建并分別作為第一個引數傳遞給“請求”和“回應”事件。
req是對原始 http.ClientRequest 的參考。
兩個流都可以發出事件,您可以分別處理它們。
此外,當您拒絕 Promise 時,您實際上無法從 中獲取 statusCode 和 StatusMessage ,req因為 中存在錯誤req并且.on("response")不會發出。因此,您需要自定義statusCodeandstatusMessage自己。
const https = require("https");
// {valid_to: cert.valid_to, statusCode, statusMessage}
// {error: -1, statusCode, statusMessage}.
(async () => {
const options = {
hostname: "githubasdfa.com",
port: 443,
path: "/",
method: "GET",
timeout: 1000,
};
options.agent = new https.Agent(options);
try {
const response = await new Promise((resolve, reject) => {
let valid_to;
let statusCode;
let statusMessage;
const req = https
.request(
{
...options,
checkServerIdentity: function (host, cert) {
valid_to = cert.valid_to;
},
},
res => {
res.on("data", chunk => {
resolve({
valid_to,
statusCode,
statusMessage,
});
});
res.on("end", () => {
console.log("No more data in response.");
});
}
)
.on("error", err => {
console.log(err);
reject({
error: -2,
statusCode: "custom code",
statusMessage: "unhandled error",
});
})
.on("timeout", chunk => {
reject({
error: -1,
statusCode: "custom code",
statusMessage: "unhandled error",
});
})
.on("response", response => {
statusCode = response.statusCode;
statusMessage = response.statusMessage;
})
.end();
});
console.log(response);
} catch (error) {
console.log(error);
}
})();
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432982.html
標籤:javascript 节点.js ecmascript-6 https
