通过 koa 提供静态文件并使用基本身份验证
Serving static files via koa and using basic auth
我已经使用 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);
你必须yield
才能制作中间件的包装器:
app.use(function *() {
yield serve('.')
});
或者不带wrapper功能直接使用中间件:
app.use(serve('.'));
我已经使用 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);
你必须yield
才能制作中间件的包装器:
app.use(function *() {
yield serve('.')
});
或者不带wrapper功能直接使用中间件:
app.use(serve('.'));