Неизвестное значение в req.param в node.js - PullRequest
0 голосов
/ 05 апреля 2020

Я учусь node.js и поэтому постараюсь создать простое веб-приложение, которое показывает текущие новости. API, который я использую, предлагает несколько категорий для новостей.

Поэтому я создаю маршрут, который принимает категорию в качестве параметра:

routes/index.js
---------------
const router = require('express').Router();
const renderHome = require('../controllers/newsController');
const quotesCookie = require('./../middleware/quotesCookie');

router.get('/', quotesCookie, renderHome);
router.get('/:category', quotesCookie, renderHome);


module.exports = router;

Мой контроллер выглядит следующим образом:

controllers/newsController.js
-----------------------------
const newsService = require('./../services/newsService');

const renderHome = async ( req, res ) => {
  const category = req.params.category;
  console.log(req.params);

  const quote = res.quoteOfTheDay;

  const { status, msg } = await newsService.topHeadlines(category);

  res.render('home', {
    title: 'News2Go',
    author: quote.author,
    quote: quote.quote,
    articles: msg.articles
  });
};


module.exports = renderHome;

Когда я, например, вызываю http://localhost:3000/entertainment, console.log в контроллере выводит это на консоль:

{ category: 'entertainment' }
{ category: 'sw.js' }

У меня нет абсолютно никакой подсказки, где 'sw. js 'происходит из ... Появляется через несколько миллисекунд после реальной категории и сообщает, что функция topHeadlines вызывается дважды.

Кто-то знал, что это? Это я что то пропустил? Спасибо в Advan c!

1 Ответ

2 голосов
/ 05 апреля 2020

Видимо, на вашей веб-странице есть скрипт с именем sw.js. По этой причине браузер будет запрашивать, чтобы URL-адрес http://localhost:3000/sw.js и ваш маршрут :category обрабатывали этот запрос и регистрировали категорию sw.js.

. Помните, что ВСЕ ресурсы, используемые на вашем сайте, будут запрашивается браузером и будет рассматриваться вашим Express сервером как входящие запросы. Не только страница верхнего уровня, но и все скрипты, изображения, шрифты, CSS файлы и т. Д. c ... используемые вашими страницами.

Как правило, не рекомендуется определять широко открытые обработчик маршрута верхнего уровня, подобный следующему:

router.get('/:category', ...)

Поскольку это захватит ВСЕ URL верхнего уровня и не оставит ни одного для использования остальной частью вашего сайта. Возможно, было бы более разумно использовать такую ​​структуру:

router.get('/category/:category', ...)

с URL-адресом http://localhost:3000/category/entertainment. Затем вы можете более четко отделить фактические запросы категории от всех других запросов на вашем сайте. Либо это, либо вам придется переместить ВСЕ другие URL-адреса, используемые на вашем сайте, в маршруты, которые идут до этого, и / или использовать подкаталоги на их странице, такие как:

 http://localhost:3000/scripts/sw.js
 http://localhost:3000/styles/main.css
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...