在节点js路由

时间:2016-05-12 01:11:46

标签: javascript node.js express instagram-api

我正在构建一个幻灯片,可以在Instagram上使用某个标记来提取图片。 Instagram API要求我调用他们的身份验证URL以接收访问令牌。使用节点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中提出访问该网址的请求?这只是一个普通的http.request()吗?

我不想让用户通过重定向过程,这就是我想把它放在Node中的原因。我正在按照这些说明https://www.instagram.com/developer/authentication/

1 个答案:

答案 0 :(得分:2)

您可以执行重定向或使用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(重定向)发送回您的服务器。然后,您可以使用该代码来检索用户令牌。然后,您可以使用授权令牌进行后续调用。