nodejs

پلتفرم NodeJS

(NodeJS Platform)

🎯 توضیحات و نکات تکمیلی

فهرست عناوین:

انتخاب نسخه‌ی NodeJS

به‌صورت پیش‌فرض، برنامه‌ی شما روی نسخه‌ی ۲۰ این پلتفرم اجرا می‌شود. در صورتی که قصد دارید نسخه دیگری را برای اجرای برنامه‌ی‌تان استفاده کنید می‌توانید داخل فایل liara.json بخش زیر را اضافه کنید: (فایل زیر برای یک برنامه تستی در نظر گرفته شده است.)

{
  "platform": "node",
  "app": "nodejs-starter",
  "port": 8000,
  "node": {
    "version": "14"
  }
}

در حال حاضر، از نسخه‌های زیر پشتیبانی می‌شود:

  • 8
  • 10
  • 12
  • 14
  • 16
  • 18
  • 20 (پیش‌فرض)

ES6 و build کردن برنامه

اگر برنامه‌ی‌تان را با ES6 و یا بالاتر نوشته‌اید و برنامه‌ی‌تان قبل از اجرا شدن، نیاز به build شدن دارد، باید یک اسکریپت دیگر با نامbuildتعریف کنید و دستورات لازم برای build شدن برنامه‌ی‌تان را داخل package.json تعریف کنید.
برای نمونه:

{
  "scripts": {
    "start": "node build/server.js",
    "build": "gulp build"
  }
}

تنظیمات TrustedProxies

با توجه به این نکته که تمامی درخواست‌ها توسط Reverse proxy لیارا به برنامه‌ی شما هدایت می‌شود باید در زمان استفاده از فریم‌ورک‌های مختلف برای مشاهده‌ی IP واقعی کاربران و بسیاری از قابلیت‌های دیگر تعیین کنید که برنامه‌ی شما در پشت یک Reverse proxy راه‌اندازی شده است.

فریم‌ورک Express

const app = express();
app.set("trust proxy", 1);

فریم‌ورک Koa

const app = new Koa({ proxy: true });
// or
const app = new Koa();
app.proxy = true;

رفع خطای GET query missing در GraphQL

قابلیت Playground در Apollo Server در محیط Production به‌صورت پیش‌فرض غیرفعال است. برای فعال‌سازی، لازم است تا فیلدهایintrospectionوplaygroundرا برابر با trueتنظیم و سپس دیپلوی کنید.

const { ApolloServer } = require('apollo-server');
const { typeDefs, resolvers } = require('./schema');

const server = new ApolloServer({
  typeDefs,
  resolvers,
  introspection: true,
  playground: true,
});

server.listen().then(({ url }) => {
  console.log(`🚀 Server ready at ${url}`);
});

منبع: Enabling GraphQL Playground in production

تنظیم منطقه‌ی زمانی (TimeZone)

به صورت پیش‌فرض، منطقه‌ی زمانی بر روی Asia/Tehran تنظیم شده است. برای تغییر مقدار پیش‌فرض، می‌توانید از پارامترtimezoneدر فایل liara.json استفاده کنید. برای نمونه:

{
  "platform": "node",
  "app": "nodejs-starter",
  "port": 8000,
  "node": {
    "timezone": "America/Los_Angeles"
  }
}

رفع خطای CORS

فریم‌ورک Express

با وجود انواع مختلف فریم‌ورک‌ها، برای رفع خطای CORS راه حل‌های متفاوتی وجود دارد. برای مثال در فریم‌ورک Express باید طبق مستندات رسمی این فریم‌ورک، پکیج cors را نصب کرده:

$ npm i cors

و به‌شکل زیر از آن در برنامه‌ی خود استفاده کنید:

const express = require('express')
const cors = require('cors')
const app = express()

app.use(cors())

فریم‌ورک Fastify

به‌منظور رفع خطای CORS در فریم‌ورک Fastify باید به‌شکل زیر از افزونه‌ی fastify-express و پکیج cors در برنامه‌ی خود استفاده کنید:

await fastify.register(require('fastify-express'))
fastify.use(require('cors')())

برای کسب اطلاعات بیشتر می‌توانید مستندات رسمی این فریم‌ورک را مطالعه کنید.

غیرفعال کردن Mirror

Mirror اختصاصی لیارا به‌منظور دانلود سریع‌تر پکیج‌ها در پلتفرم NodeJS به‌صورت پیش‌فرض فعال است اما شما می‌توانید با قرار دادن قطعه‌کد زیر در فایل liara.json، این قابلیت را غیر فعال کنید:

{
  "node": {
    "mirror": false
  }
}
;