2016-07-11 13 views
0

Ich verwende MEAN Stack und ich sende Abfrageparameter dynamisch an meine Nodejs Serverendpunkte. Mein Client-Controller:MEAN Nodejs JSON.parse übergibt Daten vom Client an den Server

$http.get('/api/things',{params:{query:query}}).then(response => { 
     this.awesomeThings = response.data; 
     socket.syncUpdates('thing', this.awesomeThings); 
    }); 

wo Abfrage ein Wert in die Steuerung eingespritzt wird. Dies ist der Server-Controller-Funktion (die funktioniert):

export function index(req, res) { 
    var query = req.query.query && JSON.parse(req.query.query) 
    Thing.find(query).sort({_id:-1}).limit(20).execAsync() 
    .then(respondWithResult(res)) 
    .catch(handleError(res)); 
} 

Die oben genannten Arbeiten, aber ich versuche die Linie

var query = req.query.query && JSON.parse(req.query.query) 

wie ich sie nie zuvor gesehen haben, dies zu verstehen (und ich weiß nicht stammen aus einem Programmierhintergrund). Ich console.logged Abfrage und verstehe, dass es ein Objekt ist (was von Mongodb erforderlich ist), aber wenn ich console.logged (JSON.parse (req.query.query)) oder JSON.parse (Abfrage), um die endgültige Ausgabe zu finden, die Programm hört auf zu arbeiten mit keine Fehlermeldungen, sehr seltsam .. Wenn jemand die obige Syntax erklären kann und warum es so für es funktioniert, würde das sehr geschätzt werden .. PS, wenn ich versuche, die JSON-Konsole zu loggen .parse wie so, nicht geladen werden, obwohl es überhaupt keine Wirkung haben sollte:

export function index(req, res) { 
    var query = req.query.query && JSON.parse(req.query.query) 
    var que = JSON.parse(req.query.query) 
    Thing.find(query).sort({_id:-1}).limit(20).execAsync() 
    .then(respondWithResult(res)) 
    .catch(handleError(res)); 
    console.log("que"+que) 
} 
+0

Mögliche Duplikat [Zuweisung mit Doppelampersand "&&"] (http://stackoverflow.com/questions/12878612/assignment-with-double-ampersand) – DAXaholic

+0

Dies ist der einzige Code, der funktioniert. Wenn ich es nicht so code, funktioniert es nicht. Die obigen Codes stammen aus tatsächlichen Arbeitscodes, ich frage nur, was diese Syntax bedeutet und warum sie funktioniert. –

Antwort

1

function one() { 
 
    var x = {}; 
 
    var res = JSON.parse(x.y); 
 
    console.log(res); 
 
} 
 

 
function two() { 
 
    var x = {}; 
 
    var res = x.y && JSON.parse(x.y); 
 
    console.log(res); 
 
}
<button onclick="one()">ERROR</button> 
 
<button onclick="two()">NO ERROR</button>

var x = data && JSON.parse(data); 

Da der Ausdruck von links ausgewertet wird, werden die ersten Daten ausgewertet. Wenn es nicht definiert ist, wird das nächste Teil ->JSON.parse() nicht ausgeführt. Auf der anderen Seite, wenn Daten definiert sind parse wird versucht und das Ergebnis wird zurückgegeben und in x gespeichert.

Hauptvorteil hier ist das Parse nicht ausgeführt, wenn die Variable nicht definiert war.

es gleichwertig sein könnte, zu sagen:

if(data) {x = JSON.parse(x);} 
+0

Die seltsame Sache ist, dass, wenn ich var x = JSON.parse (Daten), die Daten nicht laden, aber wenn ich x = Daten && JSON.parse (Daten), es funktioniert. –

+0

wahrscheinlich ist 'data' nicht definiert und das' data && 'ist vor der Ausführung von' JSON.parse() 'geschützt, was sonst zu einem Fehler führen würde. – Iceman

+0

Was ist, wenn Daten null sind? –

Verwandte Themen