【问题标题】:Serving static files via koa and using basic auth通过 koa 提供静态文件并使用基本身份验证
【发布时间】:2016-01-30 17:58:31
【问题描述】:

我已经使用 Koa 构建了一个小型测试服务器。它应该为位于同一目录(和子目录)中但需要使用基本身份验证进行身份验证的所有文件提供服务。因此我使用包koa-static & koa-basic auth

我不知道如何组合这两个中间件? 使用时:app.use(function *() { }); 应为 this.body = 'text',而不是使用 koa-static

这是完整的代码:

"use strict";

var koa   = require('koa')
  , serve = require('koa-static')
  , auth  = require('koa-basic-auth');

var app = koa();

// Default configuration
let port = 3000;

app.use(function *(next){
    try {
      yield next;
    } catch (err) {
      if (401 == err.status) {
        this.status = 401;
        this.set('WWW-Authenticate', 'Basic');
        this.body = 'Access denied';
      } else {
        throw err;
      }
    }
  });


// Require auth
app.use(auth({ name: 'admin' , pass: 'admin'}))

//Serve static files
//DOESN'T WORK
app.use(function *() {
  serve('.')
});

// WORKS
app.use(function *(){
  this.body = 'secret';
});

app.listen(port);

【问题讨论】:

    标签: javascript node.js generator koa


    【解决方案1】:

    您必须拥有yield 才能制作中间件的包装器:

    app.use(function *() {
      yield serve('.')
    });
    

    或者直接使用不带包装函数的中间件:

    app.use(serve('.'));
    

    【讨论】: