我正在尝试连接到Artsy public API而我遇到了一些麻烦。请放轻松,我是NodeJS和SailsJS的新手。我创建了一个名为api / services / Artsy.js的文件,现在我已经知道我的方法(见下文)是否真的是Sails的做法。这是一个问题。如果没有,在SailsJS中设置API基本调用的正确方法是什么?或者更具体地说,到Artsy API?
想到的问题:
我需要等到检索到令牌才能调用需要它的API方法。这是通过pubsub还是其他一些技术完成的。是否有任何实际例子说明它在SailsJS中是如何工作的?
您可以在视图中使用服务调用吗?怎么样?这甚至有意义吗?它似乎对API调用有用。
注意:我已经设置了包含重要变量的文件config / artsy.js。 (见下文)
/api/services/Artsy.js
/**
*
* Artsy.js => in api/services
* @description A service that connects to the Artsy.net public API.
* @url https://developers.artsy.net/
**/
var request = require('superagent'),
traverson = require('traverson'),
xappToken;
module.exports = {
init: function(){
sails.log.info('----- Artsy API Initialized -----');
var clientID = sails.config.artsy.clientId,
clientSecret = sails.config.artsy.clientSecret,
apiTokenUrl = sails.config.artsy.apiTokenUrl;
try{
request
.post(apiTokenUrl)
.send({ client_id: clientID, client_secret: clientSecret })
.end(function(res) {
if (res) {
xappToken = res.body.token;
} else {
sails.log.error('api/services/Artsy.js:');
sails.log.error(res.text);
}
});
} catch(e) {
sails.log.error('api/services/Artsy.js:');
sails.log.error(e);
}
},
getArtistStatement: function(){
var api = traverson.jsonHal.from(sails.config.artsy.apiUrl);
var request = api.newRequest()
.follow('artist')
.withRequestOptions({
headers: {
'X-Xapp-Token': xappToken,
'Accept': 'application/vnd.artsy-v2+json'
}
})
.withTemplateParameters({ id: 'andy-warhol' })
.getResource(function(error, andyWarhol) {
console.log(andyWarhol.name + 'was born in ' + andyWarhol.birthday + ' in ' + andyWarhol.hometown);
});
}
};
/config/artsy.js
/**
* artsy.js
*
* @description :: This is the brains that allow the app to connect to artsy.
* @docs :: http://sailsjs.org/#!documentation/models
*/
module.exports.artsy = {
clientId: 'CLIENT_ID',
clientSecret: 'CLIENT_SECRET',
apiUrl: 'https://api.artsy.net/api',
apiTokenUrl: 'https://api.artsy.net/api/tokens/xapp_token'
};
答案 0 :(得分:1)
如果我理解你的问题那么
这是一个问题。如果没有,在SailsJS中设置API基本调用的正确方法是什么?
此类案件的服务非常合适。 您可以在config / bootstrap.js中调用init方法,或者在用户登录或其他位置时调用它。
我需要等到检索到令牌才能调用需要它的API方法。这是通过pubsub
完成的
是的,您可以使用pubsub,但使用promises似乎更好。例如,您可以使用此lib https://github.com/istavros/vowjs
您可以在视图中使用服务调用吗?怎么样?这甚至有意义吗?它似乎对API调用很有用。
我想是的,但似乎你不应该想要它。当模板与控制器传递的数据一起使用时,它看起来更好。因此,在控制器(或mb模型)中使用服务,然后将结果传递给模板。