与Koa的子域路由?

Kar*_*son 0 subdomain node.js koa

我希望能够做到以下几点:

mydomain.com/this/that
Run Code Online (Sandbox Code Playgroud)

应该重定向到:

a.sub.domain.mydomain.com/this/that
Run Code Online (Sandbox Code Playgroud)

我看到Express有以下内容:

github.com/bmullan91/express-subdomain
Run Code Online (Sandbox Code Playgroud)

Koa确实有一个:

github.com/demohi/koa-subdomain
Run Code Online (Sandbox Code Playgroud)

你可以看到它已经死了.无论如何使用Koa实现这一目标?

小智 5

你可以写一个子域中间件来实现这个目标.

var koa = require('koa');
var app = koa();


routeMain = function *(next) {
    this.body = 'mydomain.com';
};


routeSub = function *(next) {
    this.body = 'sub.mydomain.com';
};


// subdomain middleware
subdomain = function (domain,route){
    return function *(next){
        var s=this.subdomains[0] || '';
        if (s === domain) {
            yield route.call(this,next);
        }
        else{
            yield next;
        }
    };
};


app.use(subdomain('sub', routeSub));
app.use(subdomain('', routeMain));

app.use(function *(next){
    console.log("done");
});


app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

  • @Danny:因为Koa正在为每个请求创建一个`this-context`,所以`this.subdomains []`数组中至少有一个条目.`this.subdomains`不是从`app.use`创建的 - 它是一个数组,因为它还包含子子子域...例如`this.subdomains ['bar','foo']`for` foo.bar.example.com` (3认同)
  • @Larvata:我对`var s = this.subdomains [0] ||这一行很困惑 '';`这是怎么回事?Koa是通过收集所有app.use(子域并将其堆叠到this.subdomains数组中)来做到这一点的吗? (2认同)