Krabs เป็นมิดเดิลแวร์ Express.js/Fastify สำหรับองค์กรสำหรับการให้บริการเว็บไซต์ต่าง ๆ นับพัน จากอินสแตนซ์ถัดไปของ Js
Krabs มีให้ใน NPM และสามารถติดตั้งได้ดังนี้:
สำหรับ Express.js (ดูใน NPM)
yarn add krabs
# or
npm install --save krabsสำหรับการอดอาหาร (ดูใน NPM)
yarn add fastify-krabs
# or
npm insall --save fastify-krabs_app และ _document หน้าเป็นเรื่องธรรมดาสำหรับทุกเว็บไซต์คุณสามารถดูวิดีโอแนะนำบน YouTube :

สมมติว่าเราต้องการรองรับสองเว็บไซต์ที่แตกต่างกันด้วยอินสแตนซ์หนึ่งถัดไปของ Js และให้บริการโดยใช้เซิร์ฟเวอร์ Express.js เพียงหนึ่งเดียว เขียนการกำหนดค่าต่อไปนี้ภายในไฟล์ .krabs.js หรือ .krabs.config.js ภายในรูทของโครงการของคุณ:
module . exports = {
tenants : [
{
name : 'website-1' ,
domains : [
{
development : / dev.[a-z]*.local.website-1.com / , // Regex supported!
staging : 'stage.website-1.com' ,
production : 'website-1.com' ,
} ,
] ,
} ,
{
name : 'website-2' ,
domains : [
{
development : 'local.website-2.com' ,
staging : 'stage.website-2.com' ,
production : / [w|d|-|_]+.website-2.com / , // Regex supported!
} ,
] ,
} ,
] ,
} ; สร้างไฟล์ index.js และเติมด้วยเนื้อหาต่อไปนี้:
const express = require ( 'express' ) ;
const next = require ( 'next' ) ;
const krabs = require ( 'krabs' ) . default ;
const dev = process . env . NODE_ENV !== 'production' ;
const app = next ( { dev } ) ;
async function main ( ) {
try {
await app . prepare ( ) ;
const handle = app . getRequestHandler ( ) ;
const server = express ( ) ;
server
. get ( '*' , ( req , res ) => krabs ( req , res , handle , app ) )
. listen ( 3000 , ( ) => console . log ( 'server ready' ) ) ;
} catch ( err ) {
console . log ( err . stack ) ;
}
}
main ( ) ; ภายในไฟล์ .krabs.js ของเราเรากำหนดค่าผู้เช่าสองคนด้วยคุณสมบัติสอง name ที่แตกต่างกัน: website-1 และ website-2 ตอนนี้เรามาสร้างโฟลเดอร์ใหม่สองโฟลเดอร์ภายใน pages/ ไดเรกทอรีเริ่มต้นของ JS Next.js:
pages/
- _app.js
- website-1
- website-2 อย่าลังเลที่จะเพิ่มหน้าใด ๆ ที่คุณต้องการภายในโฟลเดอร์ทั้งสองนี้เนื่องจากพวกเขาจะได้รับการปฏิบัติเนื่องจากเป็น pages/ โฟลเดอร์เริ่มต้นของ Js มาเพิ่มเนื้อหาต่อไปนี้ลงใน pages/website-1/about.js :
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; และรหัสต่อไปนี้ไปยัง pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; แมป local.website-1.com และ local.website-2.com ในไฟล์โฮสต์ของคุณจากนั้นบูตเซิร์ฟเวอร์โดยพิมพ์:
node index.jsไปที่ http://dev.pizza.local.website-1.com/about และ http://local.website-2.com/about คุณจะเห็นส่วนประกอบด้านบนที่แสดงโดยอินสแตนซ์ Next.js เดียวกัน!
สมมติว่าเราต้องการรองรับสองเว็บไซต์ที่แตกต่างกันด้วยอินสแตนซ์หนึ่งถัดไปของ Js และให้บริการโดยใช้เซิร์ฟเวอร์ Express.js เพียงหนึ่งเดียว เขียนการกำหนดค่าต่อไปนี้ภายในไฟล์ .krabs.js หรือ .krabs.config.js ภายในรูทของโครงการของคุณ:
module . exports = {
tenants : [
{
name : 'website-1' ,
domains : [
{
development : / dev.[a-z]*.local.website-1.com / , // Regex supported!
staging : 'stage.website-1.com' ,
production : 'website-1.com' ,
} ,
] ,
} ,
{
name : 'website-2' ,
domains : [
{
development : 'local.website-2.com' ,
staging : 'stage.website-2.com' ,
production : / [w|d|-|_]+.website-2.com / , // Regex supported!
} ,
] ,
} ,
] ,
} ; สร้างไฟล์ index.js และเติมด้วยเนื้อหาต่อไปนี้:
const fastify = require ( 'fastify' ) ( { trustProxy : true } ) ;
const next = require ( 'next' ) ;
const krabs = require ( '../dist/fastify-krabs' ) . default ;
const dev = process . env . NODE_ENV !== 'production' ;
const app = next ( { dev } ) ;
async function main ( ) {
try {
await app . prepare ( ) ;
const handle = app . getRequestHandler ( ) ;
fastify
. get ( '*' , ( request , reply ) => krabs ( request , reply , handle , app ) )
. listen ( 3000 , ( ) => console . log ( 'server ready' ) ) ;
} catch ( err ) {
console . log ( err . stack ) ;
}
}
main ( ) ; ภายในไฟล์ .krabs.js ของเราเรากำหนดค่าผู้เช่าสองคนด้วยคุณสมบัติสอง name ที่แตกต่างกัน: website-1 และ website-2 ตอนนี้เรามาสร้างโฟลเดอร์ใหม่สองโฟลเดอร์ภายใน pages/ ไดเรกทอรีเริ่มต้นของ JS Next.js:
pages/
- _app.js
- website-1
- website-2 อย่าลังเลที่จะเพิ่มหน้าใด ๆ ที่คุณต้องการภายในโฟลเดอร์ทั้งสองนี้เนื่องจากพวกเขาจะได้รับการปฏิบัติเนื่องจากเป็น pages/ โฟลเดอร์เริ่มต้นของ Js มาเพิ่มเนื้อหาต่อไปนี้ลงใน pages/website-1/about.js :
function About ( ) {
return < div > About website 1 </ div > ;
}
export default About ; และรหัสต่อไปนี้ไปยัง pages/website-2/about.js :
function About ( ) {
return < div > This is website 2 </ div > ;
}
export default About ; แมป local.website-1.com และ local.website-2.com ในไฟล์โฮสต์ของคุณจากนั้นบูตเซิร์ฟเวอร์โดยพิมพ์:
node index.jsไปที่ http://dev.pizza.local.website-1.com/about และ http://local.website-2.com/about คุณจะเห็นส่วนประกอบด้านบนที่แสดงโดยอินสแตนซ์ Next.js เดียวกัน!
คุณสามารถค้นหาเอกสารฉบับเต็ม (พร้อมตัวอย่างรหัสจริง) ได้ที่นี่!
Krabs เป็น อิสระเช่นเดียวกับอิสระ และได้รับใบอนุญาตภายใต้ใบอนุญาต MIT
