如何在`app.get`callback中使用asynchronous响应值
我想使用flickrapi( https://www.npmjs.com/package/flickrapi )包。 我需要授权它:
Flickr.tokenOnly(flickrOptions, function(error, flickr) { //I need this flickr variable });
我想在我的快速代码中使用这个flickr
variables
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. }); });