search icon
در حال جستجو...

رفع خطای Access Control Allow Origin – CORS در nodejs

خطای CORS (Cross-Origin Resource Sharing) زمانی رخ می‌دهد که یک برنامه Frontend از یک دامنه، پورت یا پروتکل متفاوت، درخواست خود را به سرویس Node.js ارسال کند، اما سرور اجازه دریافت درخواست از مبدأ موردنظر را نداشته باشد.

برای مثال، فرض کنید Frontend روی آدرس زیر اجرا شده باشد:

https://example.com

و API مربوط به Node.js روی آدرس دیگری قرار داشته باشد:

https://api.example.com

در این حالت مرورگر به دلایل امنیتی بررسی می‌کند که آیا API اجازه دریافت درخواست از example.com را دارد یا خیر. اگر سرور هدرهای مربوط به CORS را ارسال نکرده باشد، مرورگر درخواست را مسدود کرده و خطایی مشابه زیر نمایش می‌دهد:

Access to XMLHttpRequest ... has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.

این خطا معمولاً به معنی خراب بودن API یا در دسترس نبودن سرویس نیست؛ بلکه نشان می‌دهد سرور مقصد اجازه دسترسی از مبدأ درخواست را صادر نکرده است.

رفع خطا در Node.js

اگر از Express استفاده می‌کنید، ابتدا پکیج cors را نصب کنید:

npm install cors

سپس در فایل اصلی برنامه، CORS را فعال کنید:

const cors = require('cors');

app.use(cors());

با این تنظیم، درخواست‌ها از تمام Originها مجاز خواهند بود.

محدود کردن دسترسی به یک دامنه خاص

اگر می‌خواهید فقط یک دامنه مشخص اجازه دسترسی به API را داشته باشد، می‌توانید Origin موردنظر را مشخص کنید:

app.use(cors({
    origin: 'https://example.com'
}));

در این حالت فقط درخواست‌هایی که از https://example.com ارسال شوند مجاز خواهند بود.

 

اگر از NestJS استفاده می‌کنید، در فایل main.ts می‌توانید CORS را به این شکل فعال کنید:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  app.enableCors({
    origin: 'https://example.com',
  });

  await app.listen(3000);
}

bootstrap();

پس از اعمال تغییرات، سرویس Node.js را deploy کنید تا تنظیمات جدید اعمال شوند.

اگر از framework دیگری استفاده می‌کنید، باید مستندات مربوط به آن فریم‌ورک را بررسی کنید.