Использование CORS в Node.js

получить доступ к файловой системе в Node Изучение

Слово CORS означает «Совместное использование ресурсов между источниками»Cross-Origin Resource Sharing — это механизм, основанный на HTTP-заголовке, реализованный браузером, который позволяет серверу или API (интерфейс прикладного программирования) указывать любые источники (отличающиеся с точки зрения протокола, имени хоста или порта), отличные от источника, из которого неизвестный источник получает разрешение на доступ и загрузку ресурсов. Пакет cors, доступный в реестре npm, используется для устранения ошибок CORS в приложении Node.js.

Давайте разберемся на примере.

Шаг 1: Установка

Поскольку пакет CORS доступен в npm (диспетчере пакетов узла), который является сторонним пакетом Node.js, мы должны установить Node.js в нашей локальной системе. Для проверки введите следующую команду в терминале.

node -v

Команда покажет версию Node.js, установленную в вашей системе. Если выдает какую-то ошибку, заставьте правильно установить Node.js.

Шаг 2:  Настройка проекта и структура папок. Сначала создайте в своей системе папку с именем «geeksforgeeks» и перейдите в нее с помощью командной строки. Для этого используйте следующую команду.

mkdir geeksforgeeks && cd geeksforgeeks

Внутри этой папки создайте две отдельные папки: клиентскую и серверную ( используя ту же команду mkdir ). Также внутри клиента папка создает файлы index.html и srcipt.js. Внутри папки сервера введите следующую команду для создания файла package.json:

npm init

Теперь создайте файл index.js в папке сервера, чтобы написать логику на стороне сервера. Наша текущая структура папок должна выглядеть так.

Структура проекта: Это будет выглядеть следующим образом.

Это будет выглядеть следующим обр

Шаг 3: Теперь в том же каталоге установите необходимые пакеты (express и cors), используя следующую команду:

npm install express cors

Шаг 4: Это код внутри файла index.html. Это основной HTML-код, который будет показан клиенту в браузере.

HTML

<!DOCTYPE html>
<html lang="en">
  
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport"
          content="width=device-width, initial-scale=1.0">
    <title>Sample webpage</title>
    <script src="script.js"></script>
</head>
  
<body></body>
  
</html>
<!-- Frontend will be running on port 5500. -->

Шаг 5: Это код внутри файла script.js. Файл script.js будет использоваться для получения данных с сервера для заполнения внешнего интерфейса.

script.js

// script.js file
// Fetching data from server running at port 5000.

fetch('http://localhost:5000/secret')
.then((res) => res.json())
.then((data) => console.log(data));

Шаг 6: Клиентская часть работает на порту 5500. Теперь давайте посмотрим на проблему без ошибок. Теперь давайте создадим сервер Express в index.js без пакета cors, чтобы показать ошибку CORS.

index.js

// index.js file

// Requiring module
const express = require('express')
const cors = require('cors')

// Creating express app 
const app = express()

// Sample api routes for testing
app.get('/',(req, res) => {
    res.json("welcome to our server")
});

app.get('/secret',(req, res) => {
    const secret =  Math.floor(Math.random()*100)
    res.json({secret})
});

// Port Number
const port = 5000;

// Server setup
app.listen(port, () => {
    console.log(`Server running on port ${port}.`)
});

Шаг для запуска приложения : Запустите сервер, введя следующую команду:

node index.js

Вывод: это приведет к ошибке CORS, и желаемые ресурсы не будут получены из конечных точек API.

ошибке CORS, и желаемые ресурсы не будут получены из конечных точек AP

Шаг 7: Включение CORS для всех маршрутов сервера, новый index.js понравится.

index.js

//index.js file
// Requiring module
const express = require('express')
const cors = require('cors')

// Creating express app 
const app = express()

// Enabling CORS for any unknown 
// origin(https://xyz.example.com)
app.use(cors());

// Sample api routes for testing
app.get('/',(req, res) => {
    res.json("welcome to our server")
});

app.get('/secret',(req, res) => {
    const secret =  Math.floor(Math.random()*100)
    res.json({secret})
});

// Port Number
const port = 5000;

// Server setup
app.listen(port, () => {
    console.log(`Server running on port ${port}.`)
});

Мы должны использовать дополнительные две строки, чтобы включить CORS для всех маршрутов.

const cors = require(cors)
app.use(cors())  # this line enables CORS action for all routes as no argument has been passed.

Вывод: это приведет к желаемому результату, как мы видим ниже.

ведет к желаемому результату, как мы видим ниж

Шаг 8: Теперь давайте создадим CORS для указанного маршрута. Но может быть случай, когда только определенное количество маршрутов на нашем сервере должно быть разрешено обслуживать ресурсы для любых источников XYZ, и нам необходимо защитить другие маршруты от потенциального злоумышленника (любой URL-адрес, не соответствующий политике того же происхождения) из-за к конфиденциальности. Здесь мы включим запросы CORS для определенного количества маршрутов, как показано ниже.

index.js

// Requiring module
const express = require('express')
const cors = require('cors')

// Creating express app 
const app = express()

// Enabling CORS for some specific origins only.
let corsOptions = {
    origin : ['http://localhost:5500'],
}

app.use(cors(corsOptions))

// Sample api routes for testing
app.get('/',(req, res) => {
    res.json("welcome to our server")
});

app.get('/secret', cors(corsOptions) , (req, res) => {
    const secret =  Math.floor(Math.random()*100)
    res.json({secret})
});

// Port Number
const port = 5000;

// Server setup
app.listen(port, () => {
    console.log(`Server running on port ${port}.`)
});

Мы разрешаем запросы из определенных источников с помощью объекта corsOptions.

let corsOptions = {
    origin : ['http://localhost:5500'],
}    
# this corsOptions object enables CORS action for all origins running on port 5500 only.
# So if an application is running on any port other than 5000(own origin) and 5500, 
  no CORS action will be enabled.

Выход:

аем запросы из определенных источников с помощью объекта 

Читайте также:  Как реализовать простую очередь задач в Node.js
Оцените статью
bestprogrammer.ru
Добавить комментарий