J'espère que tout le monde pourra continuer à lire ma série d'articles. C'est également le plus grand encouragement et le soutien pour moi. Faisons des progrès ensemble, nous faisons des amis à travers la littérature et nous aidons-nous. Ok, allons directement au sujet d'aujourd'hui.
Qu'est-ce que "connecter" et comment comprendre le middleware? Regardons l'article d'aujourd'hui avec des questions.
Comment comprendre le "middleware"?
Ma compréhension est que le middleware est quelque chose de similaire à un filtre, un moyen de gérer les demandes et les réponses entre le client et l'application.
Si un processus de traitement HTTP est comparé au traitement des eaux usées, le middleware est comme des couches de filtres. Chaque middleware réécrit la demande ou les données de réponse (et) pendant le traitement HTTP,
état, implémente des fonctions spécifiques.
Qu'est-ce que "connecter"?
Nous pouvons considérer la connexion comme une collection d'un tas de middleware. Pour chaque demande, Connect utilisera la couche middleware pour filtrer la demande, chacune peut obtenir la demande HTTP.
TJ Holowaychuk a déclaré à propos de Connect qu'il existe deux types de middleware. L'un d'eux est un filtre:
Les filtres gèrent les demandes, mais ils ne répondent pas aux demandes (pensez aux journaux du serveur).
Le deuxième type est un fournisseur, qui répond à la demande. Vous pouvez utiliser plusieurs middleware en fonction de vos besoins. La demande HTTP répondra à la demande via chaque middleware jusqu'à l'un des middleware.
2. Introduction au middleware de connexion intégré
Voici plusieurs middleware principaux et des exemples sont décrits:
(1), CookieParser ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Les cookies peuvent également être cryptés via Req.secret.
La copie de code est la suivante:
var connect = require ('./ lib / connect');
var app = connect ()
.Use (connect.cookieParser ('Secret String'))
.Use (fonction (req, res, suivant) {
req.cookies.website = "Salut, je suis Bigbear!" ;
res.end (json.stringify (req.cookies));
}). écouter (8888);
(2), session
Description: Gestion de session Middleware
Dépendance: cookieParser
Paramètres: Options
Options:
Clé: le nom des cookies, la valeur par défaut est connect.sid
Store: instance de stockage de session
Secret: Session Cookie Encryption
Cookie: la configuration des cookies de la session, la valeur par défaut est {path: '/', httponly: true, maxage: null}
Proxy: un proxy inversé pour les cookies sécurisés, implémentés via X-Forwarded-proto
Option cookie:
cookie.maxage: la valeur par défaut est nul, indiquant que le cookie est supprimé lorsque le navigateur est fermé.
La copie de code est la suivante:
var connect = require ('./ lib / connect');
var app = connect ()
.Use (connect.logger ('dev'))
.User (connect.cookieParser ())
.Use (Connect.Session ({Secret: '123', Cookie: {Maxage: 60000}}))
.Use (fonction (req, res, suivant) {
if (req.Session.pv) {
res.sethEader ('Content-Type', 'Text / Html');
res.write ('vues:' + req.Session.pv);
res.end ();
req.Session.pv ++;
}autre{
req.Session.pv = 1;
res.end («rafraîchissement»);
}
})
.Listen (8888);
Au fur et à mesure que le client actualise en continu la page "PV" et le nombre de maintenance du côté du serveur "session" continuera d'augmenter.
(3), BodyParser -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
La copie de code est la suivante:
var connect = require ('connect');
var app = connect ()
.Use (connect.bodyParser ())
.Use (fonction (req, res) {
res.end ('req.body =>' + json.stringify (req.body));
})
.Listen (8888);
Troisièmement, prenons un exemple de comparaison et voyons les avantages de l'utilisation du middleware.
La copie de code est la suivante:
/ *
* Traitement de fichiers statique implémenté à l'aide de la connexion
* /
var connect = require ('connect');
connect (connect.static (__ dirname + '/public')).Listen(//Listeten
8888,
fonction() {
console.log ('Connexion démarrée sur le port 8888');
}
));
/ *
* Implémentation à l'aide de l'API native de nœud
* /
var http = require ('http');
http.createServer (
fonction (req, res) {
var url = require ('url');
var fs = require ('fs');
var pathname = __dirname + '/ public' + url.parse (req.url) .pathname;
// Lire les fichiers locaux
fs.readfile (
PathName,
fonction (err, data) {
// Gestion des exceptions
if (err) {
res.writehead (500);
res.end ('500');
}
autre {
res.end (données);
}
}
));
}
) .Listen (// écoute
8888,
fonction() {
Console.log ('Http Server a démarré sur le port 8888');
}
));
Bien que l'API native du nœud ait déjà dépensé tant de lignes de code, elle laisse toujours de nombreux aspects d'un simple serveur de fichiers statiques qui n'ont pas été traités.
Par exemple: 404 et d'autres exceptions ne sont pas traitées, il n'y a pas de vérification de sécurité de chemin de fichier de base (en fait, nous pouvons accéder à l'ensemble du système de fichiers du système d'exploitation), une gestion globale des exceptions, etc.
Dans le même temps, Connect a déjà géré tous ces problèmes.
Quatre, résumons
(1) Comprendre le traitement de streaming du middleware.
La copie de code est la suivante:
var app = connect ();
app.use (connect.StaticCache ());
app.use (connect.static (__ dirname + '/ public'));
app.use (connect.cookieParser ());
app.use (connect.Session ());
app.use (connect.query ());
app.use (connect.bodyParser ());
app.use (connect.csrf ());
app.use (function (req, res, suivant) {
// middleware
});
app.Listen (8888);
(2) Différenciation entre les méthodes d'implémentation native et les implémentations de middleware.
(3) À travers les exemples ci-dessus de middleware, nous pouvons comprendre les utilisations et les scénarios d'utilisation et nous référer à des documents pertinents pour maîtriser l'utilisation de base d'autres middleware.