如何在`app.get`callback中使用asynchronous响应值

我想使用flickrapi( https://www.npmjs.com/package/flickrapi )包。 我需要授权它:

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

我想在我的快速代码中使用这个flickrvariables

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

我应该怎么做?

模块化方法:

把你的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对象。 以便在服务器启动时立即创build对象。 由于此flickr对象仅用于公共API,并且不需要一次又一次地进行身份validation。

您可以通过简单地在app.js文件中要求来实例化flickr对象:

 require('./flickr-public'); 

现在只需要简单地访问flickr对象。

routes.js

 const flickr = require('../path-to/flickr-public'); app.get('/', function (req, res) { //use flickr object to perform actions. }); 

说明

从node.js 文档 :

模块在第一次加载后被caching。 这意味着(除其他外)每个调用require('foo')将返回完全相同的对象,如果它将parsing为相同的文件。 多次调用require('foo')可能不会导致模块代码被多次执行。

只要把它放在你的得到

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

在你的路由callback中直接使用它

 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. }); });