ES6中的环回模型 [英] Loopback models in ES6

查看:84
本文介绍了ES6中的环回模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是loopback.js的新手。我想对类使用ES6语法。

I'm new to loopback.js. I want to use the ES6 syntax for classes.

如何使用环回定义模型的方式来实现这一目标?

module.exports = function(MyModel) {
  MyModel.on('dataSourceAttached', function(obj){
    var find = MyModel.find;
    MyModel.find = function(filter, cb) {
      return find.apply(this, arguments);
    };
  });
};


推荐答案

https://github.com/NextFaze/Loopback-Style-Guide#custom-model-methods
我在ES6中为管理模型创建了一个bootstraping类。我在ES5和ES6中创建了2个示例。

Some ideas by https://github.com/NextFaze/Loopback-Style-Guide#custom-model-methods I create a bootstraping class in ES6 for managment models. I create 2 examples in ES5 and ES6.

ES5模型示例

module.exports = function(Sbif) {

  var request = require('request-promise'),
      token    = process.env.SBIF_TOKEN_URL,
      api_url  =  process.env.SBIF_API_URL;

  // UTM ---------------------------------------------
  Sbif.utm = function(params, cb) {
    makeRequest('utm',{}).then(function(res) {
      cb(null, JSON.parse(res).UTMs[0]);
    });
  };

  Sbif.remoteMethod('utm',{
    accepts: {arg: 'params', type: 'string'},
    returns: {arg: 'utm', type: 'string'},
    http: {path: '/utm', verb: 'get' }
  });

  // IPC ---------------------------------------------
  Sbif.ipc = function(params, cb) {
    makeRequest('ipc', {}).then(function(res) {
      cb(null, JSON.parse(res).IPCs[0]);
    });
  };

  Sbif.remoteMethod('ipc', {
    accepts: {arg: 'params', type: 'string'},
    returns: {arg: 'ipc', type: 'string'},
    http: {path: '/ipc'}
  });

  // EURO --------------------------------------------
  Sbif.euro = function(params, cb) {
    makeRequest('euro', {}).then(function(res) {
      cb(null, JSON.parse(res).Euros[0]);
    });
  };

  Sbif.remoteMethod('euro', {
    accepts: {arg: 'params', type: 'string'},
    returns: {arg: 'euro', type: 'string'},
    http: {path: '/euro'}
  });

  // Dolár -------------------------------------------
  Sbif.dolar = function(params, cb) {
    makeRequest('dolar',{}).then(function(res) {
      cb(null,JSON.parse(res).Dolares[0]);
    });
  };

  Sbif.remoteMethod('dolar', {
    accepts: {arg: 'params', type: 'string'},
    returns: {arg: 'dolar', type: 'string'},
    http: {path: '/dolar'}
  });


  // UF ----------------------------------------------
  Sbif.uf = function(params, cb) {
    makeRequest('uf',{}).then(function(res) {
      cb(null, JSON.parse(res).UFs[0]);
    });
  };

  Sbif.remoteMethod( 'uf',{
    accepts: {arg: 'params', type: 'string'},
    returns: {arg: 'uf', type: 'string'},
    http: {path: '/uf', verb: 'get' }
  });


  // SBIF Token and URL
  function makeRequest(indicador, parametros){
    return request(buildUrl(indicador, parametros));
  }

  function buildUrl(indicador, parametros){
    var url = api_url + indicador;
    if(parametros.length > 0){
      parametros.forEach((parametros) {
        url += '/' + parametros; 
      });
    }
    return url + "?apikey=" + token + "&formato=json";
  }


};

ES6模型示例

import request from 'request-promise';

var token    = process.env.SBIF_TOKEN_URL,
    api_url  =  process.env.SBIF_API_URL;

class SbifApi{
  constructor(SbifModel){
    //map remote methods to class methods. Set an extra this using the .bind function
    SbifModel.uf = this.getData.bind(SbifModel, 'uf');
    SbifModel.utm = this.getData.bind(SbifModel, 'utm');
    SbifModel.ipc = this.getData.bind(SbifModel, 'ipc');
    SbifModel.dolar = this.getData.bind(SbifModel, 'dolar');
    SbifModel.euro = this.getData.bind(SbifModel, 'euro');

    //Set remotes
    this.setRemotes(SbifModel, {name: 'uf', path: '/uf', root: 'uf'});
    this.setRemotes(SbifModel, {name: 'utm', path: '/utm', root: 'utm'});
    this.setRemotes(SbifModel, {name: 'ipc', path: '/ipc', root: 'ipc'});
    this.setRemotes(SbifModel, {name: 'dolar', path: '/dolar', root: 'dolar'});
    this.setRemotes(SbifModel, {name: 'euro', path: '/euro', root: 'euro'});

    return SbifModel;
  }
  setRemotes(model, remoteMethod){
    let remoteOpts = {
      accepts: {
        arg: 'params', 
        type: 'string'
      },
      returns: {
        arg: remoteMethod.root || remoteMethod.name,
        type: 'string'
      },
      http: {
        path: remoteMethod.path || '/' + remoteMethod.name, 
        verb: 'get' 
      }
    };
    //Set the model remote methodnpm
    model.remoteMethod(remoteMethod.name, remoteOpts);
  }
  getData(type, params, callback){
    request(`${api_url}/${type}?apikey=${token}&formato=json`).then((res) => {

      let data = JSON.parse(res);

      switch(type){
        case 'uf': 
          data = data.UFs[0]; 
          break;
        case 'utm': 
          data = data.UTMs[0]; 
          break;
        case 'ipc': 
          data = data.IPCs[0]; 
          break;
        case 'dolar': 
          data = data.Dolares[0]; 
          break;
        case 'euro': 
          data = data.Euros[0]; 
          break;
      }
      callback(null, data);
    });
  }
}
export default function(Model) { new SbifApi(Model); }

这篇关于ES6中的环回模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆