从featherJS应用程序调用远程休息服务的最佳实践

时间:2016-10-06 11:03:59

标签: node.js node-request feathersjs

我需要一种从我的FeatherJS(基于Express的NodeJS框架)应用程序调用远程REST-API的方法。

我发现有几篇建议使用请求模块的帖子很好:https://github.com/request/request

现在我有使用FeatherJS有更好的建议吗?或者请求模块是否正常?

1 个答案:

答案 0 :(得分:1)

我推荐request-promise模块,因为Feathers服务期望承诺。以下是一个示例服务from this post how to make an existing API real-time

const feathers = require('feathers');
const rest = require('feathers-rest');
const socketio = require('feathers-socketio');
const bodyParser = require('body-parser');
const handler = require('feathers-errors/handler');
const request = require('request-promise');

// A request instance that talks to the API
const makeRequest = request.defaults({
  baseUrl: 'https://todo-backend-rails.herokuapp.com',
  json: true
});

const todoService = {
  find(params) {
    return makeRequest(`/`);
  },

  get(id, params) {
    return makeRequest(`/${id}`);
  },

  create(data, params) {
    return makeRequest({
      uri: `/`,
      method: 'POST',
      body: data
    });
  },

  update(id, data, params) {
    // PATCH and update work the same here
    return this.update(id, data, params);
  },

  patch(id, data, params) {
    return makeRequest({
      uri: `/${id}`,
      method: 'PATCH',
      body: data
    });
  },

  remove(id, params) {
    // Retrieve the original Todo first so we can return it
    // The API only sends an empty body
    return this.get(id, params).then(todo => makeRequest({
      method: 'DELETE',
      uri: `/${id}`
    }).then(() => todo));
  }
};

// A normal Feathers application setup
const app = feathers()
  .use(bodyParser.json())
  .use(bodyParser.urlencoded({ extended: true }))
  .configure(rest())
  .configure(socketio())
  .use('/todos', todoService)
  .use('/', feathers.static(__dirname))
  .use(handler());

app.listen(3030);