2016-08-17 7 views
3

저는 loopback.js에서 새로 생겼습니다. 생성 클래스에 ES6 구문을 사용하고 싶습니다. 모델을 루프백으로 정의하는 방법을 사용하여이를 달성하는 방법은 무엇입니까? https://github.com/NextFaze/Loopback-Style-Guide#custom-model-methods 에 의해ES6의 루프백 모델

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

답변

1

일부 아이디어는 내가 Managment를 모델 ES6의 bootstraping 클래스를 만들 수 있습니다. 저는 ES5와 ES6에서 2 가지 예를 만듭니다.

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); } 
관련 문제