Express Промежуточное программное обеспечение для включения контроля доступа-разрешения-происхождения для GET, PUT, POST, DELETE требуется - PullRequest
0 голосов
/ 15 марта 2020

Я реализовал Nodejs REST API для моего сайта и использую Reactjs для веб-сайтов и React Native для мобильных приложений. Я реализовал CORS, используя следующий код:

app.options('/*', (_req, res) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Endpoint, Token');
    res.sendStatus(200);
});

Это хорошо для мобильного приложения, но теперь, когда я внедрил Интернет, мне нужно добавить промежуточное оборудование, включающее CORS для каждого метода запроса, например, так :

app.get('/*', (_req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Endpoint, Token');
    next();
});

Браузер выдаст исключение, если я не сделаю, как указано выше. Я знал о предварительном запросе OPTIONS и поэтому добавил промежуточное программное обеспечение, включающее CORS, но теперь, поскольку мне нужно добавить промежуточное программное обеспечение для методов последующих запросов, я не могу найти никакого объяснения, почему предыдущий подход остановился работает по запросам после предполетного полета. Я не проверял мобильное приложение, но могу сказать, что заголовки запросов такие же, как и в предыдущем. Кто-нибудь может объяснить, что происходит?

1 Ответ

1 голос
/ 15 марта 2020

Если вы используете Express, я бы предложил app.use() для обработки всех маршрутов и методов:

app.use((req, res, next) => { 
    res.setHeader('Access-Control-Allow-Origin', '*'); 
    ...   

    if (req.method === 'OPTIONS') {
        res.status(200).send('Go away');        
    } else next();   
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...