0

以下は、私がセットアップした単純な Koa サーバーです。ただし、無効な GET リクエストが実行されるたびに、Chrome のネットワーク リソース タブでpendingが指定されるように、サーバーが「ハング」します。

サーバー.js

const app = new Koa();

const apiUrl = `http://${KOA_HOST}:${API_PORT}`;
const proxy = httpProxy.createProxyServer({
    target: apiUrl,
});
const router = new Router();

app.use(errorHandler);
app.use(compress({
    flush: zlib.Z_SYNC_FLUSH,
}));

app.use(responseTime());
app.use(logger());
app.use(helmet());
app.use(bodyParser());

router.get('/bundle/*', serveStatic(PUBLIC_PATH));
router.get('*', render);

app.use(router.routes());

const server = http.createServer((req, res) => {
    const path = url.parse(req.url).pathname;
    if (/^\/api.*/.test(path)) {
        return proxy.web(req, res, { target: apiUrl });
    }
    app.callback()(req, res); // need to understand this more
});

server.listen(KOA_PORT, KOA_HOST, err => {
    if (err) {
        console.log(chalk.red(err));
    } else {
        const url = `http://${KOA_HOST}:${KOA_PORT}`;
        console.log(`${chalk.yellow(`backend server`)} listening on ${chalk.yellow(url)}`);
    }
});

エラーミドルウェア

export default async function errorHandler(ctx, next) {
    try {
        await next();
    } catch (err) {
        console.log(pe.render(err));
        ctx.redirect('/oops');
    }
}

無効な静的ファイル リクエストを含む、すべての無効な GET リクエストを適切に処理するにはどうすればよいですか?

4

1 に答える 1

1

app.use(router.allowedMethods())ミドルウェアを使用する。

notImplementedまたはの応答メソッドをmethodNotAllowed自分で定義できます。

于 2016-05-09T08:01:23.630 に答える