Selbst Konsumieren JSON API
In einer selbst JSON API raubend Sie einige Funktionen in einigen Standalone-Controller-Funktionen definieren und dann die Funktionalität verdrahten nach der Tat zum Ausdruck bringen. Lassen Sie uns eine Bibliotheksanwendung als Beispiel:
books.js
module.exports = {
browse: function() {
return Book.findAll()
},
read: function (options) {
return Book.findById(options.book)
},
processLateFees: function() {
// Do a bunch of things to process late fees
}
}
to-http.js
In dieser Datei wir eine Funktion erstellen, die eine Controller-Funktion auf eine HTTP-Route umwandelt. Wir nehmen die Abfrage params und passieren, dass in unseren Controller als Optionen:
module.exports = function toHTTP (func) {
return function (req, res) {
func(req.params).then(function (data) {
res.send(data)
})
}
}
router.js
Und dann wir unsere Controller auf unseren HTTP-Router anschließen
var express = require('express')
var books = require('./books')
var toHTTP = require('./to-http')
var app = express()
app.get('/books', toHTTP(books.browse))
app.get('/books/:book', toHTTP(books.read))
app.get('/batch-jobs/process-late-fees', toHTTP(books.processLateFees))
So, jetzt haben wir eine Express-Anwendung, die an die Controller-Funktionalität angeschlossen ist. Und das Wunderbare ist, dass wir diese Controller-Funktionen auch manuell aufrufen können.
var books = require('./books')
books.processLateFees().then(function() {
// late fees have been processed
})
Wenn Sie eine mehr in die Tiefe Beispiel hierfür benötigen, ist die Ghost blog codebase zur Zeit, um dieses Muster gebaut. Es ist eine sehr informative Lektüre.
Haben Sie die Express-Instanz haben? Wenn ja, können Sie einfach das Ereignis "Anfrage" auslösen. – gustavohenke
@gustavohenke Ja, ich kann Zugang benötigen - könnten Sie ein einfaches Beispiel aufstellen? – bendytree
Es ist nicht möglich, Anfragen zu testen, ohne eine zu senden. Die http.request- oder request-Bibliothek von node von mikeal reicht aus, um Anfragen zu senden. So sollten Sie Tests auf dem Server durchführen. Auch dies läuft auf dem Server selbst, so dass '127.0.0.1' gut funktionieren sollte. – user568109