从http.get获取状态代码

时间:2018-06-04 11:10:28

标签: javascript node.js

我正在尝试根据其状态代码验证某些网址。我试着做这样的事情:

const http = require('http');

let link = 'http://source.unsplash.com/random/100x100';

const getStatusCode = (link, callback) => {
    http.get(link, res => {
        callback(res.statusCode);
    })
}

const codeCallback = code => {
    console.log('Status code inside callback: ', code); //works, displays 301
    return code
}

let statusCode = getStatusCode(link, codeCallback)

console.log(statusCode) //undefined

if (statusCode) {...} //do something

有没有办法存储状态代码,还是应该在回调中实现验证逻辑?

2 个答案:

答案 0 :(得分:1)

欢迎回调地狱;)

您使用它的方式 - 是的,您需要在回调中执行验证逻辑。

如果您决定进一步探索这个领域,我建议您在JavaScript中查找promises和async / await。

祝你好运!

答案 1 :(得分:0)

您的代码是在javascript中发生异步调用时出现的典型问题的一个很好的示例。具体来说,问题是您尝试在其值可用之前打印变量。

为了解释更多,所有的http请求本质上都是异步的,因为它们在您等待服务器响应时不应该阻止您的应用程序。

因此,当您调用console.log(statusCode)时,此行将在执行http.get回调之前执行,因此在执行时,statusCode未定义。

实际上,解决方案是处理回调中的statusCode。这样的事情。

const http = require('http');

let link = 'http://source.unsplash.com/random/100x100';

const getStatusCode = (link, callback) => {
    http.get(link, res => {
        if (res.statusCode){
            callback(res.statusCode);
        }
    })
}

const codeCallback = code => {
    console.log('Status code inside callback: ', code); //works, displays 301
    return code
}

getStatusCode(link, codeCallback);

如果您有兴趣了解整个异步逻辑执行是如何工作的,那么这是一个很好的介绍https://www.youtube.com/watch?v=8aGhZQkoFbQ