如何在应用中使用异步响应值.得到的回调

How to use an asynchronous response value in an `app.get` callback

本文关键字:响应 回调 异步 应用      更新时间:2023-09-26

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

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

我想在我的express code

中使用这个flickr变量
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对象。这样,当服务器启动时,对象就会立即创建。由于此flickr对象仅用于公共API,不需要一次又一次的身份验证。

你可以实例化flickr对象,只需在app.js file:
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文档:

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

放到get

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

直接在你的路由回调中使用

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