Служите статическим файлам с Koa2
Как мне обслуживать статические файлы на Koa2, когда кто-то посещает этот маршрут? Я пробовал миллионы вещей, и я всегда получаю сообщение не найдено. Сервер ответил со статусом 404
import 'babel-polyfill'
import co from 'co'
import path from 'path'
import render from 'koa-swig'
import Koa from 'koa'
import Router from 'koa-router'
import serve from 'koa-static'
import convert from 'koa-convert'
import send from 'koa-send'
const app: Koa = new Koa()
const route: Routerr = new Router()
**example 1**
app.use(serve(path.resolve(__dirname + '/public/index.html')))
router.get('/lista', function *() {
console.log('Hello')
})
**example 2**
app.use(async (ctx) => {
await send(ctx, '/index.html', { root: '/public' })
})
router.get('/lista', function *() {
console.log('Hello')
})
app.use(router.routes())
app.use(router.allowedMethods())
2 ответа
Решение
Некоторое время назад я сделал простое приложение-прототип Koa 2 и просто скопировал примеры со страниц модуля. К сожалению, это означает, что я действительно не могу рассказать вам, как это работает, но я действительно заставил что-то работать, и это выглядит примерно так (Используя ES2016):
const serve = require('koa-static');
const mount = require('koa-mount');
const Koa = require('koa');
const static_pages = new Koa();
static_pages.use(serve('static'));
const app = new Koa();
app
.use(mount('/static', static_pages))
Это "монтирует" /static
в качестве корня для всех статических страниц, которые расположены в локальном каталоге static
,
Этот подход похож на тот, который упоминал программист @Some, но без использования mount.
import Koa from 'koa';
import serveStatic from 'koa-static';
const app = new Koa();
app.use(serveStatic(__dirname + '/public'));