2016-10-26 186 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. 
    }); 
}); 
相关问题