express cors заблокированы только на root маршруте некоторых API - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть пользовательские настройки Cors, из-за предоставления метода пользовательских параметров. ниже код



// region cors
// app.use(cors()); // - fixme > using cors lib will disable http options for all routes. avoid using it.
app.all('/*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Headers", "Authorization");
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, HEAD, OPTIONS")
    next();
});
// endregion cors

и вот какой-то маршрут. который ведет себя странно.

const router = express.Router();

router.options(`/`,  authMiddleware, options);
router.get(`/term`, authMiddleware, search);
router.get(`/`, authMiddleware, search);
router.get(`/recent`, authMiddleware, getRecentSearchHistory);

export {router}


вы можете видеть, ~/term и / идентичны. который я сделал ~/term дополнительно, чтобы проверить, работает ли он.

проблема в том, что запрос API к / будет заблокирован !!? По какой-то причине /term работает просто отлично, но express заблокирует только маршрут / root. (какой фактический маршрут абс http://localhost:3000/api/search)

имеет ли express резервирование имени маршрута специально для «поиска» или чего-то еще?

я не понимаю этого поведения.

1 Ответ

0 голосов
/ 15 апреля 2020

Я не совсем уверен, что понимаю вопрос, но в любом случае я попытаюсь ответить.

Маршрутизатор - это новый экземпляр express, он не наследует настройки cors приложения , Я некоторое время не использовал express роутер, но я думаю, что если вы заставите роутер использовать cors, он может работать, если вы хотите, чтобы маршрут / не попадал на маршрут /*, который я предлагаю, возможно, определяя его над маршрутом приложения.

Вот пример того, что я имею в виду

import express from 'express'
import cors from 'cors';

const router = express.Router();
router.use(cors());

router.options(`/`,  authMiddleware, options);
router.get(`/term`, authMiddleware, search);
router.get(`/`, authMiddleware, search);
router.get(`/recent`, authMiddleware, getRecentSearchHistory);

const app = express();
app.use(cors());

app.use(router);

// app.use('/index/', index);

app.listen(3000, () => console.log('app listening'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...