2015-12-13 11 views
8

określam moją api coś jak poniżej:Pióra wywołanie niestandardowej metody API

class MyFeathersApi { 
    feathersClient: any; 
    accountsAPI: any; 
    productsAPI: any; 

    constructor(app) { 
    var port: number = app.get('port'); 

    this.accountsAPI = app.service('/api/accounts'); 
    this.productsAPI = app.service('/api/products'); 
    } 

    findAdminAccounts(filter: any, cb: (err:Error, accounts:Models.IAccount[]) => void) { 
    filter = { query: { adminProfile: { $exists: true } } } 
    this.accountsAPI.find(filter, cb); 
    } 

Kiedy chcę użyć metody adaptera bazy danych od klienta, czyli znalezienie i/lub tworzenia, robię poniżej:

var accountsAPIService = app.service('/api/accounts'); 
accountsAPIService.find(function(error, accounts) { 
    ... 
}); 

Jak wywołać metody niestandardowe, takie jak findAdminAccounts() z klientem?

Odpowiedz

8

Można użyć tylko zwykłego interfejsu usługi na kliencie. Okazało się, że obsługa niestandardowych metod (i wszystkich problemów, które przynosi, od jasno zdefiniowanego interfejsu do arbitralnych nazw i parametrów metod), nie jest konieczna, ponieważ wszystko samo w sobie może być opisane jako zasób (usługa).

korzyści (jak bezpieczeństwo, przewidywalność i wysyłanie dobrze zdefiniowanych zdarzeń w czasie rzeczywistym) do tej pory mocno przeważają niewielkie zmiany w myśleniu wymagane przy konceptualizacji logiki aplikacji.

W przykładzie można wykonać usługę otoki, który pobiera konta administratora tak:

class AdminAccounts { 
    find(params) { 
    const accountService = this.app.service('/api/accounts'); 

    return accountService.find({ query: { adminProfile: { $exists: true } } }); 
    } 

    setup(app) { 
    this.app = app; 
    } 
} 

app.use('/api/adminAccounts', new AdminAccounts()); 

Alternatywnie można zaimplementować hook który mapuje parametry zapytania do większych zapytań tak:

app.service('/api/accounts').hooks({ 
    before: { 
    find(hook) { 
     if(hook.params.query.admin) { 
     hook.params.query.adminProfile = { $exists: true }; 
     } 
    } 
    } 
}); 

Pozwoliłoby to teraz nazywanie czegoś takiego jak /api/accounts?admin.

Więcej informacji można znaleźć this FAQ.

+0

Chyba, usługa wrapper służy mój problem. Dobrze? –

+0

Tak, tak myślę. To trochę zmiana myślenia od metody opartej na podejściu opartym na zasobach, ale korzyści są tego warte i to właśnie Feathers może zrobić najlepiej. – Daff

+0

Dziękuję. Jestem nowym użytkownikiem Node.JS, próbując zrozumieć jednocześnie wiele "technologii", w tym Feathers.JS. Twoja pomoc jest naprawdę doceniana. –

Powiązane problemy