2016-04-25 8 views
1

Zuerst habe ich die Lösung für dieses Problem gesucht und ich habe nichts gefunden. Es tut uns leid, wenn es dupliziert wird.Konflikte zwischen Endpunkten in Node.js mit Express-Anwendung

ich in meinem express haben + node.js App zwei Endpunkte wie folgt aus:

// Gets a tweet by unique id 
app.get('/tweets:id', function(req, res, next) { 
    // Response management 
}); 

// Gets mentions of user unique id 
app.get('/tweets/mentions', function(req, res, next) { 
    // Response management 
}); 

Das Problem besteht darin, dass eine GET-Petition an anfordernden "/ tweets/erwähnt" besuchte zuerst durch "/tweets /: id " und später von "/tweets/Erwähnungen ", einen Konflikt zu machen.

Ich habe versucht, die Deklarationsreihenfolge der Endpunkte zu ändern, aber immer die Anfrage wird von beiden Endpunkten begleitet.

Auch habe ich versucht, Dinge wie „/ Tweets :: erwähnt“, aber ich brauche den Endpunkt über Zugriff „/ tweets/erwähnt“, und ich nehme an, es eine Möglichkeit ist.

Wie kann ich diesen Konflikt lösen? Danke.

+0

Eine Frage: Wie übergeben Sie die eindeutige ID in '/ tweets/erwähnt /' Endpunkt? –

+0

Sie sollten '/ mentions' verwenden, um ein korrektes REST-Design zu erhalten. –

+0

@MatteoTosi Ich habe ein JWT in einem Header, mit dem ich seine Benutzer-ID in der Datenbank suchen kann. – rpfc

Antwort

0

Verwenden Sie next() in einem der Handler?

next() übergibt die Kontrolle an die nächste passende Route, also in Ihrem Beispiel, wenn einer von ihnen aufgerufen wird und Sie innerhalb next() aufrufen, wird der andere aufgerufen.

Ich rate immer 'Router' zu verwenden, wenn Sie mehr als einen Basispfad haben, weil es Ihnen hilft, es organisiert zu halten.

+0

Danke für Ihre Antwort, die Verwendung von Router und nicht mit next() war die Lösung für mich. – rpfc

0

Sie können den Konflikt beheben, indem Sie den Wert req.params.id im Handler "tweet by id" überprüfen.

+0

Danke ich werde das für weitere Probleme berücksichtigen! – rpfc

0

Für Routen mit zusätzlichen Parametern wird immer empfohlen, nicht denselben Basispfad anderer Routen zu verwenden.

So etwas könnte für Sie arbeiten:

app.get('/tweets/users/:id', function(req, res, next) { 
    // Response management 
}); 

// Gets mentions of user unique id 
app.get('/tweets/mentions', function(req, res, next) { 
    // Response management 
}); 
+0

Danke, sind die Antworten gültig, danke für Ihren Beitrag, ich werde alle diese Antworten berücksichtigen. – rpfc

Verwandte Themen