#express #middleware
#выражать #промежуточное программное обеспечение #экспресс
Вопрос:
Сейчас я изучаю Express, и у меня возникают трудности с пониманием потока промежуточного программного обеспечения в Express. Например, если у меня есть следующий код, импортируйте express из ‘express’;
const app = express();
app.use((req,res,next)=>{
console.log("app.use");
res.send("hello")
})
app.use(express.static('public'));
app.listen(1234,()=>{
console.log("started at port:1234");
});
Я получу следующее в терминале started at port:1234, app.use
и «привет» в браузере, когда я наберу localhost:1234 в своем браузере. Я понимаю это, поскольку первое промежуточное программное обеспечение имеет res.send («привет»), и поэтому оно отправляет обратно «привет», не передавая res в app.use(express.static(‘public’)) (общая папка имеет index.html что в данном случае не показано)
но когда я немного изменил код, я больше не понимал поток промежуточного программного обеспечения
const app = express();
app.use(express.static('public'));
app.use((req,res,next)=>{
console.log("app.use");
res.send("hello")
})
app.listen(1234,()=>{
console.log("started at port:1234");
});
На этот раз я получу следующее в терминале started at port:1234 app.use app.use app.use
и index.html когда я набираю localhost:1234 в своем браузере.
Во-первых, я не понимаю, почему я не получаю «привет» в свой брауер. Я понимаю, app.use(express.static('public'));
но app.use появляется после того, как app.use(express.static('public'));
внутри него есть res.send («hello»), и поэтому отправленный обратно запрос должен быть «hello» вместо index.html ?
Во-вторых, почему терминал показывает «app.use» более одного раза? app.use((req,res,next)=>{console.log("app.use");res.send("hello")})
следует ли выполнять только один раз? Не говоря уже о том, что внутри него есть res.send .
Кто-нибудь может, пожалуйста, объяснить мне это, пожалуйста? Спасибо за вашу помощь
Ответ №1:
порядок, в котором определяется промежуточное программное обеспечение, имеет значение, когда первое промежуточное программное обеспечение в стеке промежуточного программного обеспечения соответствует пути запроса, оно будет отвечать за обработку запроса.
Я приведу и пример
app.use('/', (req, res, next) => {
res.send('First middleware');
});
app.use('/', (req, res, next) => {
res.send('Second middleware');
}
Как вы можете видеть, оба промежуточных программного обеспечения имеют один и тот же путь. первый обработчик запроса в стеке промежуточного программного обеспечения будет выполнен, когда URL запроса будет http://localhost:[port_number]/
, а второй не будет выполнен.
Обычно, когда вы переходите к корневому пути любого веб-сайта на серверной стороне, сервер будет искать файл с именем index.html
, который является конфигурацией по умолчанию для многих веб-серверов. Так как каталог, в котором находятся все статические файлы, обслуживаемые express, содержит файл с именем, index.html
когда вы переходите к корневому пути вашего приложения Express, которое express.static
промежуточное программное обеспечение подключено перед вашим персонализированным промежуточным программным обеспечением, как показано ниже.
app.use(express.static('public'));
app.use((req,res,next)=>{
console.log("app.use");
res.send("hello")
})
Вместо index.html
файла, который находится внутри public
каталога, будет отображаться hello
файл.