Klingt so, als müssten Sie Ihre Routing-Tabellen doppelt definieren. Sie könnten Ihre Logik ein wenig aufbrechen, damit Sie leichter auf die Funktionen zugreifen können. Definieren Sie eine StudentsController
und TeacherController
, so können Sie Express Routen wie
app.get('/api/schoolm/students', studentController.getStudents);
app.post('/api/schoolm/teachers', teachController.postTeachers);
definieren, aber sie immer noch in Ihrer Dosierung Methode zugreifen. EDIT: Sie möchten wahrscheinlich die Hauptlogik noch mehr auseinander brechen, so dass Sie die Batching-Methoden direkt aufrufen können.
StudentController.prototype.getStudents = function(params, callback){
//do stuff
callback(null, studentList);
}
StudenController.prototype.getStudentsRequest = function(req, res){
this.getStudents({}, function(err, students){
//check error
res.send(students);
});
}
//elsewhere, in routing table
app.get('/api/schoolm/students', studentController.getStudentsRequest);
//elsewhere, in batching method
//api route that matches students
studentController.getStudents(batchReq[index].value, function(err, students){
//do something with students, like put in outer results object.
//call async.each's callback(), or whatever for control flow
});
Alternativ können Sie gefälschte req
und res
Objekte machen direkt die Controller zu nennen. Etwas wie node-mocks-http.
Natürlich müssten Sie die im Stapelverarbeitungsobjekt angegebenen Pfade erneut analysieren, damit Sie die richtige Controller-Methode aufrufen und die Ergebnisse speichern können. Vielleicht würde etwas wie director (oder was auch immer Express intern verwendet) helfen.
Ihre typische Routen in Express würden ihre Antwort am Ende senden, und dass res.send
res.end
auch nennen könnte, so kann man nicht wirklich sie um sie an anderer Stelle weitergeben oder verwenden (wie Sie nicht res.end
zweimal aufrufen können).
Obwohl eigentlich, warum nicht einfach mehrere Anfragen vom Client senden. Dann müssen Sie auch keine Stapelantwort auf dem Client analysieren. Ich denke, das macht Ihre
was ist die Motivation mit 1 Anfrage in mehrere Anfrage aufgeteilt werden? – AJS
Dies ist keine Anfrage - sie sind von verschiedenen Typen, die für verschiedene APIs gedacht sind. Wenn sie in einer einzigen Anfrage geclubed werden, reduziert sich die Anzahl von Anrufen, die ich von meiner Clientseite des Codes machen möchte. – swateek
ich glaube, Ihr Ansatz ist möglicherweise nicht korrekt, sind Sie besorgt, wenn Knoten nicht die Menge der Anfragen, die Sie erwarten ?, wie eine einzige Instanz des Knotens mehr als fähig ist, die meisten Lasten zu handhaben, wenn es nicht können Sie skalieren mit Cluster, die in Knoten sehr einfach ist – AJS