如何在`app.get`回调中使用异步响应值

时间:2016-10-26 12:37:43

标签: javascript node.js express

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

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

我希望在我的快速代码中使用此flickr变量

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

我该怎么做?

3 个答案:

答案 0 :(得分: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,因此不需要反复进行身份验证。

您只需在 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 documentation

  

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

答案 1 :(得分:0)

把它放在你的获取

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

答案 2 :(得分:0)

直接在路线回调中使用

public async Task<ObservableCollection<T>> All(string url) where T:IEnumerable<T> {...}