Почему промежуточное ПО app.get не работает после промежуточного ПО app.use в expressjs

Я использую следующий код в своем файле server.js, но код в get никогда не работает с промежуточным программным обеспечением app.use(), но как только я закомментирую промежуточное программное обеспечение app.use, промежуточное программное обеспечение app.get() работает правильно. Может кто-нибудь сказать мне, почему это происходит? Вот фрагмент моего кода-

app.use('/',express.static('public'))

app.get('/',(req,res)=>{
    console.info('get req on /')
    res.send('returned') })

Пробовал. Не работает

Saurabh Singh 06.02.2019 09:19

У вас случайно нет файла index.html в вашем статическом каталоге, так как маршрут / будет искать его. Также попробуйте переместить статику после получения, так как это также более эффективно.

Keith 06.02.2019 10:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
157
1

Ответы 1

Попробуйте app.use('/', express.static('public', {fallthrough: true})) Редактировать: неважно, похоже, что Fallthrough используется по умолчанию, поэтому указание этой опции не изменит поведение.

пробовал. до сих пор не работает. Я запускаю все экспресс-приложение на http-сервере, чтобы socket.io также мог работать на том же сервере. Это что-то меняет?

Saurabh Singh 06.02.2019 09:23

Это просто меняет способ обработки ошибок. Файл, не найденный в статике, должен перейти к следующему маршруту.

Keith 06.02.2019 09:25

Я имею в виду. он обслуживает статические файлы в «общедоступной» папке. Но это также должно перейти к следующему промежуточному программному обеспечению, например, app.get(). Не должно ли это. Но этого не происходит. Это происходит, когда метод next() не указан в промежуточном программном обеспечении. Но в express.static() я не думаю, что есть способ сделать это. Есть?

Saurabh Singh 06.02.2019 09:28

@ SaurabhSingh app on a http server , что вы имеете в виду, ваше экспресс-приложение должно работать на своем собственном порту. Если вы хотите смешать что-то вроде Apache и т. д., Вам нужно изучить возможность использования обратного прокси.

Keith 06.02.2019 09:29

Опция fallthrough должна вызвать вызов next() статического промежуточного программного обеспечения, если файл не найден. github.com/expressjs/serve-static/blob/master/index.js#L107

Trevor Dixon 06.02.2019 09:30

раньше он работал на http-сервере, но теперь даже после того, как он работает на своем собственном порту, ошибка сохраняется

Saurabh Singh 06.02.2019 09:31

и как вызвать next(), если файл найден?

Saurabh Singh 06.02.2019 09:31

Он не будет вызывать next(), если файл найден. Что бы вы хотели сделать после подачи файла? Повторный вызов res.send() после обслуживания статического файла был бы плохим. Вы можете сделать что-то вроде res.on('end', () => console.info('res over')).

Trevor Dixon 06.02.2019 09:36

если файл найден, вы не можете вызвать следующий, вы не можете получить 2 ответа на один запрос. @TrevorDixon, я имею в виду, что это значение по умолчанию. Если файл не найден, он должен перейти к следующему маршруту по умолчанию.

Keith 06.02.2019 09:43

Другие вопросы по теме