KRABS是一種可用於企業的Express.js/fastify中間件,用於從單個Next.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上觀看視頻介紹:

假設我們只想僅使用一個nest.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 。因此,現在讓我們在下一個內部創建兩個新文件夾。 JS的默認pages/目錄:
pages/
- _app.js
- website-1
- website-2隨意在這兩個文件夾中添加您想要的任何頁面,因為它們將被視為Next.js的pages/文件夾。讓我們將以下內容添加到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 and http://local.website-2.com/about,您將看到上面的組件由sext.js實例呈現!
假設我們只想僅使用一個nest.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 。因此,現在讓我們在下一個內部創建兩個新文件夾。 JS的默認pages/目錄:
pages/
- _app.js
- website-1
- website-2隨意在這兩個文件夾中添加您想要的任何頁面,因為它們將被視為Next.js的pages/文件夾。讓我們將以下內容添加到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 and http://local.website-2.com/about,您將看到上面的組件由sext.js實例呈現!
您可以在此處找到完整的文檔(帶有真實的代碼示例)!
KRABS是免費的,就像在MIT許可證下獲得許可一樣。
