Sie haben ein paar Optionen:
In Middleware können Sie req.path überprüfen, um zu sehen, ob es ein Weg ist, dass Sie die Middleware oder nicht gelten sollte und verwenden Sie ein if
in Ihrer Middleware, entweder nur next()
anrufen, ohne etwas zu tun oder zu tun, was auch immer die Middleware entwickelt wird.
Sie können Ihre Routen zu dieser Seite Routen und AJAX-Routen auf separaten Pfaden entwerfen und dann einen Router für Seitenrouten und einen Router für AJAX-Routen und legen Sie die Middleware nur auf den Seitenrouter.
Es wird Ihnen wirklich helfen, eine Menge (entweder mit Option oben), wenn Sie Ihre URLs entwerfen, so dass es einfach für Ihren Server zu unterscheiden, ob dies eine URL, die nicht die Middleware angewandt haben sollte oder. In der Regel besteht die einfachste Möglichkeit darin, ein bekanntes Präfix für einen oder beide Zweige Ihres URL-Designs zu verwenden. Zum Beispiel können alle Ajax-URLs mit /api
beginnen und dann können Sie alle API-Aufrufe ganz einfach an einen speziellen Router umleiten und alle anderen URLs sind Nicht-API-URLs (wahrscheinlich Seiten-URLs).
Hier ist ein Beispiel des separaten API-Router:
// split off all API calls to a separate router
let apiRouter = express.Router();
app.use('/api', apiRouter);
// handle /api/users
apiRouter.get('/users', handleUserAjaxRequest);
// handle all other /api/xxx routes that don't have their own handler
apiRouter.use(function(req, res, next) {
// if /api request not handled by here, then don't allow it to propagate further
// it must be a invalid /api/xxx URL, so do a 404
res.status(404).end();
});
// this won't get called if there's a /api/xxx URL because that will have
// already been handled by the apiRouter
app.use(someMiddleware);
app.get('/somepage', handleSomePageURL);
Sie auch einen separaten Router für alle Seitenanforderungen, die Modularität ein wenig sauberer mit allen API Routen in einem Modul und alle machen könnte nutzen könnten Seitenrouten in einem anderen Modul, wobei jeder seinen eigenen Router exportiert.
Danke. Ich habe req.xhr von deinem Link gesehen und es ist besser für mein kleines nodejs Projekt. Aber natürlich werde ich meine zukünftigen großen nodejs Projekte verwalten, wie Sie in der zweiten Option erklären;) –