【问题标题】:Make http request within node js routes在节点 js 路由中发出 http 请求
【发布时间】:2016-05-12 01:11:46
【问题描述】:

我正在制作一个幻灯片,用于在 Instagram 上提取带有特定标签的图片。 Instagram API 要求我调用他们的身份验证 URL 以接收访问令牌。使用 node js 和 express 我构建了这样的后端:

var express = require('express');
var app = express();
app.use(express.static('public'));

app.listen(4000,function(){
   console.log("Listening to app on localhost 4000"); 
})

app.get('/',function(req,res){
    1. make call to Instagram authorization URL:
    https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=http://localhost:4000&response_type=code

    2. URL will be redirected with access code parameter

    3. Use access code to make POST request to receive access token to be able to make GET requests.

})

我的问题是如何在 NodeJS/Express 中请求访问该 url?它只是一个普通的 http.request() 吗?

我不想让用户经历重定向过程,所以我想把它放在 Node.js 中。我正在遵循这些说明https://www.instagram.com/developer/authentication/

【问题讨论】:

    标签: javascript node.js express instagram-api


    【解决方案1】:

    您可以进行重定向或使用像 instagram-node-lib 这样的 npm 库

    var express = require('express');
    var request = require('request');
    var app = express();
    
    app.use(express.static('public'));
    
    app.listen(4000, function () {
        console.log("Listening to app on localhost 4000");
    })
    
    app.get('/', function (req, res) {
        res.redirect('https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=http://localhost:4000/mycallback&response_type=code')
    })
    
    app.get('/mycallback', function (req, res) {
        //handle token retrieval here
        //do a get request as per the instagram documentation using the code sent back
        var code = req.query.code
    
    
        var url = 'https://api.instagram.com/oauth/access_token'
        var options = {
            method: 'post',
            body: {
                client_secret: 'CLIENT_SECRET',
                grant_type: 'authorization_code',
                redirect_uri: 'AUTHORIZATION_REDIRECT_URI',
                code: code
            },
            json: true,
            url: url
        }
        request(options, function (err, res, body) {
            //body should look something like this
            // {
            //     "access_token": "fb2e77d.47a0479900504cb3ab4a1f626d174d2d",
            //     "user": {
            //         "id": "1574083",
            //         "username": "snoopdogg",
            //         "full_name": "Snoop Dogg",
            //         "profile_picture": "..."
            //     }
            // }
        })
    })
    

    您将始终需要重定向,因为这就是 oAuth 的工作方式。用户在 Instagram 网站上输入密码。通过回调 url(重定向)将代码发送回您的服务器。然后,您使用该代码检索用户令牌。然后,您可以将授权令牌用于后续调用。

    【讨论】:

    • 为了让这个应用程序运行,前端应该向'/'或'/mycallback'发出GET请求吗?
    • 它应该调用 '/' 这将重定向到 Instagram。用户通过身份验证后,Instagram 将重定向到 /mycallback。
    • 我更新了这个例子给你一个更好的主意。请注意,这使用 request npm 模块,因此您必须在项目文件夹中执行“npm install --save request”
    • 非常感谢!超级有帮助。你会说这是解决这个问题的最好方法吗?我是 Node JS 的新手,并参加了关于 express 的短期课程,但这就是我选择这条路线的原因,但如果有更好的方法,我会尝试一下。
    • 我喜欢这样做,因为您可以保留服务器端(如会话等)并将令牌链接到用户会话。看看 express-session。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    相关资源
    最近更新 更多