KOA启动多个模版二级域名网站的实践

背景是这样,我需用之前已经弄好的一个站(NodeJS/Koa2框架)的项目模版分离出来搞一些站群,并且每个有独立的二级域名,过去的做法是直接复制整个Koa工程项目出来,依据各自的需求修改:

当新增一两个的时候还好说,但当考虑之后的扩展复用问题时,不能用如此老套没效率的方法实践。之后实践中使用如下的解决方案:

源码放在了我的github上 https://github.com/18978909244/group-app-demo

首先新建一个配置文件server.config.js

module.exports = [
    {
        hostname:'wjk',
        title:'王俊凯',
        port:3000
    },
    {
        hostname:'yyqx',
        title:'易烊千玺',
        port:3001
    }
]

希望最终的效果是能同时启动 http://wjk.xxx.com http://yyqx.xxx.com 两个网站

来到app.js

config.forEach(item=>{
  let router = new Router()
  let app = Object.assign(new Koa(),item) //将配置挂载到app对象上下文
  router.get('/', async (ctx, next) =>{
    ctx.response.body = item.title //首页返回各自的内容
  })
  app.use(router.routes())
  app.listen(item.port, () => {
    console.log(`${item.hostname} is running at http://localhost:${item.port}`)
  }) //监听在各自的端口上
})

当用pm2 启动app.js后可以看到两个端口都分别启动了各自的web服务器,剩下的只需要nginx去将二级域名的请求转发到各自的端口上即可。

用这样的方式可以很方便的在之后扩展增加更多的网站,挂载到app上下文后,可以在controller层、model层、view层或者service层上管理每个网站各自的配置。并且可以联想到,这可以很方便的用来做企业网站、个人博客等网站。

如果对于同样的需求有不同的解决方法欢迎与我交流