Edit: Это сообщение было написано для экспресс 3. Мелкие детали изменились с тех пор, но это концептуально то же самое.
Замечание перед тем, как я начну: Экспресс построен на вершине Connect, который в основном обрабатывает его промежуточное ПО. Когда я пишу express
в этих примерах, я бы так же легко смог написать connect
.
На нижнем уровне у вас есть HTTP-сервер узла Node. Это выглядит вроде как это:
var http = require("http");
http.createServer(function(request, response) {
response.end("Hello world!\n");
}).listen(1337, "localhost");
В принципе, вы делаете единственной функции, которая обрабатывает всех HTTP-запросы. Попробуйте использовать приведенный выше код и посетить localhost: 1337/hello или localhost: 1337/wow-anime. Технически, это все, что вам действительно нужно!
Но предположим, вы хотите, чтобы многие функции выполнялись каждый раз. Возможно, вы хотите добавить регистратор командной строки и, возможно, хотите сделать каждый простой текст запроса.
var http = require("http");
http.createServer(function(request, response) {
// logger
console.log("In comes a " + request.method + " to " + request.url);
// plain text
response.writeHead(200, { "Content-Type": "text/plain" });
// send response
response.end("Hello world!\n");
}).listen(1337, "localhost");
В экспресс/Connect, вы можете написать вместо этого:
var express = require("express");
var app = express();
app.use(express.logger());
app.use(function(request, response, next) {
response.writeHead(200, { "Content-Type": "text/plain" });
next();
});
app.use(function(request, response) {
response.end("Hello world!\n");
});
app.listen(1337);
Я думаю, как промежуточное программное список функций. Когда приходит HTTP-запрос, мы начинаем вверху и просматриваем каждое промежуточное ПО сверху вниз, и мы останавливаемся при вызове response.end
(или response.send
в экспресс).
Я написал a blog post that explains Express and middleware более подробно, если вам интересно.
Вам будет лучше искать форум или какой-либо другой сайт, на котором будут обсуждаться обсуждения. Stack Overflow не для того, чтобы задавать открытые вопросы, он задает конкретные вопросы о проблемах, с которыми вы сталкиваетесь, где эти проблемы обычно могут быть решены с помощью одного ответа без диалога назад и вперед. – mah
Проще говоря, промежуточное ПО - это функции, которые обрабатывают запросы. Когда вы создаете HTTP-сервер с узлом, он может иметь стек промежуточного программного обеспечения, связанного с ним. Когда приходит запрос, он передается первой функции промежуточного программного обеспечения вместе с обернутым объектом ServerResponse и обратным вызовом 'next()'. Каждое промежуточное программное обеспечение может решить ответить, вызвав методы объекта ответа и/или передать запрос на следующий уровень в стеке, вызвав 'next()'. – adeneo
Возможный дубликат [Что означает промежуточное ПО и app.use в Expressjs?] (Http://stackoverflow.com/questions/7337572/what-does-middleware-and-app-use-actually-mean-in-expressjs) – JohnnyHK