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许可证下获得许可一样。
