2016-10-26 307 views
1

我想使用flickrapi(https://www.npmjs.com/package/flickrapi)包。我需要授權它:如何在`app.get`回調中使用異步響應值

Flickr.tokenOnly(flickrOptions, function(error, flickr) { 
    //I need this flickr variable 
}); 

,我想在我的快件代碼

app.get('/', function (req, res) { 
    //do something with flickr 
}); 

我應該怎麼做才能使用此flickr變量?

+1

你可以叫'Flickr.tokenOnly'通常裏面的'app.get' callback..just確保CAL'res.send()'或'res.end()'終止該請求 – deadlock

回答

1

模塊方法:

把你的Flickr連接代碼分離:

flickr-public.js

var Flickr = require("flickrapi"), 
    flickrOptions = { 
     api_key: "API key that you get from Flickr", 
     secret: "API key secret that you get from Flickr" 
    }; 

module.exports = (function(){   
    Flickr.tokenOnly(flickrOptions, function(error, flickr) { 
     //handle error here 
     console.log('Flickr Object Obtained'); 
     return flickr; 
    }); 
})(); 

注:更好的實例在app.js文件Flickr的對象。 以便在服務器啓動時立即創建對象。 由於此flickr對象僅用於公共API,並且不需要一次又一次地進行身份驗證。通過簡單地要求它

require('./flickr-public'); 

現在只需訪問Flickr的對象的任何地方:

您可以通過簡單地要求它在實例Flickr的對象app.js文件。

routes.js

const flickr = require('../path-to/flickr-public'); 

app.get('/', function (req, res) { 
    //use flickr object to perform actions. 
}); 

說明

從node.js的documentation

模塊是他們第一次加載後緩存。這意味着(除其他外)每次調用require('foo')時都會返回完全相同的對象,如果它解析爲相同的文件。 對require('foo')的多次調用可能不會導致模塊代碼被多次執行。

+0

感謝,這就是我正在尋找的 – lasoweq

0

只要把你進去

app.get('/', function (req, res) { 
    Flickr.tokenOnly(flickrOptions, function(error, flickr) { 
    //do something res.status(200).send('what you want here'); 
    }); 
}); 
0

直接使用你的路線回調內部

app.get('/', function (req, res) { 
    Flickr.tokenOnly(flickrOptions, function(error, flickr) { 
     //call someother method to get photos etc. and finally call res.send() 
     res.send(photos); // where photos is obtained from flickr or anything you can pass which should be response of you request. 
    }); 
}); 
相關問題