首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接到API的SailsJS方式。最好的方法是什么?

连接到API的SailsJS方式。最好的方法是什么?
EN

Stack Overflow用户
提问于 2014-10-09 22:43:51
回答 1查看 651关注 0票数 0

我目前正试图连接到Artsy公共API,我遇到了一些麻烦。请对我放松点,我是NodeJS和SailsJS的新手。我创建了一个名为api/services/Artsy.js的文件,现在我不知道我的方法(见下文)是否真的是Sails的做事方式。这是一个问题。如果不是,在SailsJS中设置对API的基本调用的正确方法是什么?或者更具体地说,到Artsy?

脑海中浮现的问题:

  • 在调用需要令牌的API方法之前,我需要等待检索令牌。这是通过公共服务还是其他技术。有什么实用的例子可以说明这在SailsJS中是如何工作的吗?
  • 您能在视图中使用服务调用吗?多么?这有意义吗?它似乎对API调用很有用。

注意:我已经设置了包含重要变量的文件config/ set sy.js。(见下文)

/api/services/Artsy.js

代码语言:javascript
复制
/**
*
* 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 sy.js

代码语言:javascript
复制
/**
* 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'
};

EN

回答 1

Stack Overflow用户

发布于 2014-10-17 06:20:04

如果我正确理解你的问题

这是一个问题。如果不是,在SailsJS中设置对API的基本调用的正确方法是什么?

在这种情况下,服务是非常合适的。您可以在config/bootstrap.js中调用init方法,也可以在用户登录或其他地方登录时调用init方法。

在调用需要令牌的API方法之前,我需要等待检索令牌。这是通过公共场合完成的吗?

是的,你可以使用公共服务,但它似乎更好地使用承诺。例如,您可以使用这个lib https://github.com/istavros/vowjs

您能在视图中使用服务调用吗?多么?这有意义吗?它似乎对API调用很有用。

我想是的,但你似乎不想要。当模板与控制器传递的数据一起工作时,它看起来很不错。因此,在控制器(或mb模型)中使用服务,然后将结果传递给模板。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26289154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档