Node.js 使用https,我如何针对未定义的状态代码设置条件?
试图在模块中测试HTTP状态代码,但我的第一个响应总是Node.js 使用https,我如何针对未定义的状态代码设置条件?,node.js,https,undefined,Node.js,Https,Undefined,试图在模块中测试HTTP状态代码,但我的第一个响应总是undefined: foo.js const pass = require('./bar'); (async function() { const test = await pass('https://www.google.com/'); // URL for testing will be API URL console.log(`The return is: ${test}`); })(); const pass
undefined
:
foo.js
const pass = require('./bar');
(async function() {
const test = await pass('https://www.google.com/'); // URL for testing will be API URL
console.log(`The return is: ${test}`);
})();
const pass = require('./bar');
pass('https://www.google.com/', test => {
console.log(`The return is: ${test}`);
});
bar.js
const https = require('https');
module.exports = (url) => {
return new Promise((resolve, reject) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
resolve(true)
} else {
resolve(false)
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
resolve(false)
})
});
}
const https = require('https');
module.exports = (url, callback) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
callback(true)
} else {
callback(false)
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
callback(false)
})
}
尝试1:
module.exports = (url) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
return true
}
function waiting(status) {
if (typeof status !== 'undefined') {
console.log('run timeout')
setTimeout(waiting, 250)
} else {
console.log(`Results: ${status}`)
return true
}
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
return false
})
}
module.exports = (url) => {
https
.get(url, (res) => {
console.log(res.statusCode)
function waiting(status) {
if (typeof status !== 'undefined') {
console.log('run timeout')
setTimeout(waiting, 250)
} else {
console.log(`Results: ${status}`)
return true
}
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
return false
})
}
if (typeof res.statusCode === 'number' && res.statusCode !== undefined && res.statusCode !== null) {
if (!res.statusCode) {
if (typeof res.statusCode !== 'undefined') {
console.log(`Results: ${res.statusCode}`)
if (res.statusCode.toString()[0] === '2') return true
return false
}
尝试2:
module.exports = (url) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
return true
}
function waiting(status) {
if (typeof status !== 'undefined') {
console.log('run timeout')
setTimeout(waiting, 250)
} else {
console.log(`Results: ${status}`)
return true
}
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
return false
})
}
module.exports = (url) => {
https
.get(url, (res) => {
console.log(res.statusCode)
function waiting(status) {
if (typeof status !== 'undefined') {
console.log('run timeout')
setTimeout(waiting, 250)
} else {
console.log(`Results: ${status}`)
return true
}
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
return false
})
}
if (typeof res.statusCode === 'number' && res.statusCode !== undefined && res.statusCode !== null) {
if (!res.statusCode) {
if (typeof res.statusCode !== 'undefined') {
console.log(`Results: ${res.statusCode}`)
if (res.statusCode.toString()[0] === '2') return true
return false
}
检测未定义的的其他尝试:
module.exports = (url) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
return true
}
function waiting(status) {
if (typeof status !== 'undefined') {
console.log('run timeout')
setTimeout(waiting, 250)
} else {
console.log(`Results: ${status}`)
return true
}
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
return false
})
}
module.exports = (url) => {
https
.get(url, (res) => {
console.log(res.statusCode)
function waiting(status) {
if (typeof status !== 'undefined') {
console.log('run timeout')
setTimeout(waiting, 250)
} else {
console.log(`Results: ${status}`)
return true
}
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
return false
})
}
if (typeof res.statusCode === 'number' && res.statusCode !== undefined && res.statusCode !== null) {
if (!res.statusCode) {
if (typeof res.statusCode !== 'undefined') {
console.log(`Results: ${res.statusCode}`)
if (res.statusCode.toString()[0] === '2') return true
return false
}
研究:
module.exports = (url) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
return true
}
function waiting(status) {
if (typeof status !== 'undefined') {
console.log('run timeout')
setTimeout(waiting, 250)
} else {
console.log(`Results: ${status}`)
return true
}
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
return false
})
}
module.exports = (url) => {
https
.get(url, (res) => {
console.log(res.statusCode)
function waiting(status) {
if (typeof status !== 'undefined') {
console.log('run timeout')
setTimeout(waiting, 250)
} else {
console.log(`Results: ${status}`)
return true
}
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
return false
})
}
if (typeof res.statusCode === 'number' && res.statusCode !== undefined && res.statusCode !== null) {
if (!res.statusCode) {
if (typeof res.statusCode !== 'undefined') {
console.log(`Results: ${res.statusCode}`)
if (res.statusCode.toString()[0] === '2') return true
return false
}
我做错了什么?在我的模块中,如何检查
未定义
后的状态代码,以便从实际数值返回真
或假
在两次尝试中,bar.js中导出的函数都没有返回任何内容。由于您正在调用一个异步函数(https.get
),因此您需要导出的函数也是异步的。您可以在调用端使用承诺和异步/等待转换函数。例如
foo.js
const pass = require('./bar');
(async function() {
const test = await pass('https://www.google.com/'); // URL for testing will be API URL
console.log(`The return is: ${test}`);
})();
const pass = require('./bar');
pass('https://www.google.com/', test => {
console.log(`The return is: ${test}`);
});
请注意IFEE以获得异步作用域,如下所示:
bar.js
const https = require('https');
module.exports = (url) => {
return new Promise((resolve, reject) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
resolve(true)
} else {
resolve(false)
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
resolve(false)
})
});
}
const https = require('https');
module.exports = (url, callback) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
callback(true)
} else {
callback(false)
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
callback(false)
})
}
或者,您可以按如下方式使用回调:
foo.js
const pass = require('./bar');
(async function() {
const test = await pass('https://www.google.com/'); // URL for testing will be API URL
console.log(`The return is: ${test}`);
})();
const pass = require('./bar');
pass('https://www.google.com/', test => {
console.log(`The return is: ${test}`);
});
bar.js
const https = require('https');
module.exports = (url) => {
return new Promise((resolve, reject) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
resolve(true)
} else {
resolve(false)
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
resolve(false)
})
});
}
const https = require('https');
module.exports = (url, callback) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
callback(true)
} else {
callback(false)
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
callback(false)
})
}
在两次尝试中,bar.js中导出的函数都没有返回任何内容。由于您正在调用一个异步函数(
https.get
),因此您需要导出的函数也是异步的。您可以在调用端使用承诺和异步/等待转换函数。例如
foo.js
const pass = require('./bar');
(async function() {
const test = await pass('https://www.google.com/'); // URL for testing will be API URL
console.log(`The return is: ${test}`);
})();
const pass = require('./bar');
pass('https://www.google.com/', test => {
console.log(`The return is: ${test}`);
});
请注意IFEE以获得异步作用域,如下所示:
bar.js
const https = require('https');
module.exports = (url) => {
return new Promise((resolve, reject) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
resolve(true)
} else {
resolve(false)
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
resolve(false)
})
});
}
const https = require('https');
module.exports = (url, callback) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
callback(true)
} else {
callback(false)
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
callback(false)
})
}
或者,您可以按如下方式使用回调:
foo.js
const pass = require('./bar');
(async function() {
const test = await pass('https://www.google.com/'); // URL for testing will be API URL
console.log(`The return is: ${test}`);
})();
const pass = require('./bar');
pass('https://www.google.com/', test => {
console.log(`The return is: ${test}`);
});
bar.js
const https = require('https');
module.exports = (url) => {
return new Promise((resolve, reject) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
resolve(true)
} else {
resolve(false)
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
resolve(false)
})
});
}
const https = require('https');
module.exports = (url, callback) => {
https
.get(url, (res) => {
console.log(res.statusCode)
if (typeof res.statusCode !== 'undefined' && res.statusCode.toString()[0] === '2') {
console.log(`Results: ${res.statusCode}`)
callback(true)
} else {
callback(false)
}
})
.on('error', (e) => {
console.error(`Error ${e}`)
callback(false)
})
}
如果有人想使用异步函数方法,请注意,有些人会要求将其编写为
;(async function(){//code})(
。如果有人想使用async function方法,请注意,有些人会要求将其编写为;(异步函数(){//code})(
)。