2016-02-10 40 views
5

Mam problem, w którym gdy przekazuję dwa typy obiektów jako argument metody zdalnej, pierwszy argument zostaje zastąpiony przez drugi argument. Poniżej znajduje się kod i wyniki. Jak mógłbym nie mieć drugiego argumentu, który nie zastąpiłby pierwszego argumentu?Sprzężenie zwrotne: przekazywanie wielu typów obiektów w zdalnej metodzie

module.exports = (Model) => { 
    Model.calculate = (primary, secondary) => { 

    console.log(JSON.stringify(primary, null, 2)); 
    console.log(JSON.stringify(secondary, null, 2)); 

    return new Promise((resolve, reject) => { 
     resolve({ Model: calculator.calculate() }); 
    }); 
    }; 

    Model.remoteMethod('calculate', { 
    accepts: [ 
     { arg: 'primary', type: 'object', http: { source: 'body' } }, 
     { arg: 'secondary', type: 'object', http: { source: 'body' } } 
    ], 
    returns: {arg: 'Result', type: 'string'} 
    }); 
}; 

Kiedy mijam w podstawowym argumentem { "name": "Tom" } i argumentów wtórnym { „Nazwa: "Joe" } po konsoli zalogowaniu JSON obiektów pierwotne i wtórne I uzyskać wynik

primary 
{ 
    "name": "Joe" <--- WHY?! 
} 

secondary 
{ 
    "name: "Joe" 
} 

Jak widać Tom został zastąpiony Joe

Odpowiedz

8

Zmiana:..

Model.remoteMethod('calculate', { 
    accepts: [ 
     { arg: 'primary', type: 'object', http: { source: 'body' } }, 
     { arg: 'secondary', type: 'object', http: { source: 'body' } } 
    ], 
    returns: {arg: 'Result', type: 'string'} 
    }); 

do:

Model.remoteMethod('calculate', { 
    accepts: [ 
     { arg: 'primary', type: 'object' }, 
     { arg: 'secondary', type: 'object' } 
    ], 
    returns: {arg: 'Result', type: 'string'} 
    }); 

http: { source: 'body' } wysyła na całym ciele HTML jako wartość obiektu, więc wysyłasz że dwa razy - wygląda jak pole formularza o nazwie name to, co jest podniósł, ale jeśli nie, podać więcej kodu.

More info on optional HTTP mapping of input arguments here. Ale najważniejsze jest, aby pamiętać, że jest to opcja :-)

+0

Dzięki! Zadziałało! :) – emarel