Javascript 使用ExpressJS发出post请求

Javascript 使用ExpressJS发出post请求,javascript,node.js,express,Javascript,Node.js,Express,我想就GET操作提出一个POST请求 一切正常,但我看不到帖子后面的“令牌”,我不明白为什么 var request = require('request'); exports.getToken = function(req, res){ var postData = { client_id: CLIENT_ID, client_secret: CLIENT_SECRET, grant_t

我想就GET操作提出一个POST请求

一切正常,但我看不到帖子后面的“令牌”,我不明白为什么

    var request = require('request');

    exports.getToken = function(req, res){

        var postData = {
            client_id: CLIENT_ID,
            client_secret: CLIENT_SECRET,
            grant_type: 'authorization_code',
            redirect_uri: REDIRECT_URI,
            code: CODE
        }

        request.post({
            uri:"https://api.instagram.com/oauth/access_token",
            form: postData,
            followRedirect: true,
            maxRedirects: 10
        },function(err,res,body){
            var data = JSON.parse(body);
            TOKEN = data.access_token;
        });

        console.log(TOKEN);

        res.render('index', {title: '*****'});
    }
在request.post之后立即执行console.log(令牌),因此您没有给它时间来完成请求。这就是您提供回调的原因:一个在请求完成后将执行的函数

尝试将console.log移动到回调函数中,查看是否正在那里获取数据。要理解异步编程,您可以阅读很多东西。例如:


您的问题不是关于expressjs,也不是特别关于nodejs。您的困惑在于javascript中的异步执行工作:这里有一些阅读材料供您学习:是的,如果我将console.log移动到回调函数中,它就会工作,但我希望看到回调函数外的令牌…:/@tonymx227不可能,因为它尚未定义。了解异步,你就会明白了。好吧,也许我可以用不同的方式发送我的帖子…?tonymx227,这实际上不是你如何发送帖子的问题。在执行post时,会执行一个异步任务,这必然需要一些时间——但当浏览器执行此请求时,javascript会继续执行。这就是为什么您需要提供一个回调函数,当请求完成时,流返回的某个点。