
پلتفرم NodeJS
(NodeJS Platform)🎯 توضیحات و نکات تکمیلی
فهرست عناوین:
- انتخاب نسخهی NodeJS
- ES6 و build کردن برنامه
- تنظیمات TrustedProxies
- رفع خطای GET query missing در GraphQL
- تنظیم منطقهی زمانی (TimeZone)
- رفع خطای CORS
- غیرفعال کردن Mirror
انتخاب نسخهی NodeJS
بهصورت پیشفرض، برنامهی شما روی نسخهی ۱۸ این پلتفرم اجرا میشود. در صورتی که قصد دارید نسخه دیگری را برای اجرای برنامهیتان استفاده کنید میتوانید داخل فایل liara.json بخش زیر را اضافه کنید: (فایل زیر برای یک برنامه تستی در نظر گرفته شده است.)
{
"platform": "node",
"app": "nodejs-starter",
"port": 8000,
"node": {
"version": "14"
}
}
در حال حاضر، از نسخههای زیر پشتیبانی میشود:
- 8
- 10
- 12
- 14
- 16
- 18 (پیشفرض)
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
}
}