最近使用koa-router 碰到了个问题,nginx 配置了 xx.com 和 admin.xx.com 指向同一个项目,路由配置如下:
routerConfig.js
var Router = require('koa-router');
var wwwController = require('./www/controller/index');
var adminController = require('./admin/controller/index');
var wwwRouter = new Router();
var adminRouter = new Router();
wwwRouter.get('/', wwwController.show);
adminController.get('/', adminController.list);
module.exports.www = wwwRouter;
module.exports.admin = adminRouter;
app.js
var routerConfig = require('routerConfig');
var Router = require('koa-router')();
for(var _router in routerConfig) {
Router.use(routerConfig[_router].routes());
}
app.use(Router.routes());
现在访问 xx.com 是正常的,但是访问 admin.xx.com 还是匹配到了 wwwRouter 的 / ,查了下 koa-router 的 wiki ,貌似只能通过给 adminRouter 加 prefix 解决,但是这样子的话 admin.xx.com 的路由就统一多了个 prefix ,请教下大家有没有办法可以通过 host 配置,或者是我这写的不对?谢谢。
另外,我昨天改cnode密码的邮件到现在都没收到。。。
你写的这两个路由冲突,路径一样啊,只会有一个起作用。 你可以在程序里给admin加个prefix,然后在nginx做代理的时候把域名转换为带prefix的。
感觉你这像是两个域名 >admin.xx.com
是xx.com
的子域名,居然是多个域名为啥写在一个app里,分app吧
@FoghostCn 多谢回复,确实冲突了,因为权限的问题我不能直接改nginx的配置,所以就想知道有没有办法通过host配置,看起来只能是加prefix了
@ncuzp 多谢回复,我是在同一个项目下分不同的app目录,但是启动的时候是一个启动文件,同时定义了前后台的所有路由,想通过host区分前后台,再加上路由定位到不同的app,你的意思是分成两个不同的项目么?
@wk472150269 是的,看起来你的是不同的域名访问同一个项目,你的app只是你自己逻辑上的划分,实际访问的还是同一个应用, 不好区分的,要不你就后台开多个api进程然后根据不同的host访问不同的api进程数据 😄
@ncuzp 多谢,要是koa-router支持host+prefix区分就好了 😄
可以写死
app.use(function* (next){
var router;
if(this.get('host') === 'xx.com'){
router = wwwRouter;
} else if (this.get('host') === 'admin.xx.cim'){
router = adminRouter;
}
return yield router.routes().call(this, next);
});