设置静态资产路径,使用 koa 和各种中间件路由端点

Setting up static assets paths, routing endpoints with koa and various middleares

问题:

  1. 如何设置我的静态文件,以便我的 index.html 可以看到这两个目录。
  2. 当您使用 koa-router 访问默认路由时,我如何发送我的 index.html 与当我发出 AJAX Get 请求时仅发送 .json 文件?

要求:

我需要静态目录在我的应用程序中可见 src/index.html

我需要一个路由器用于两个目的:

注意:我完全愿意 add/subtract 任何中间件。但我宁愿不改变我组织目录的方式。

目录结构:

中间件:

app.js

var serve = require('koa-static');
var send = require('koa-send');
var router = require('koa-router')();
var koa = require('koa');
var app = koa();


// need this for client side packages.
app.use(serve('./node_modules/'));

// need this for client side images, video, audio etc.
app.use(serve('./src/assets/'));

// Will serve up the inital html until html5 routing takes over.
router.get('/', function *(next) {
    // send up src/index.html
});

// will serve json open a socket
router.get('/people', function *(next) {
  // send the people.json file
});

app.use(router.routes()).use(router.allowedMethods());

// errors
app.on('error', function(err, ctx){
  log.error('server error', err, ctx);
});

app.listen(3000);

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Morningharwood</title>
</head>
<body>
  <h1>suchwow</h1>
  <img src="./assets/image1.png" alt="butts"> <!-- will 404 with routing -->

  <script src="./node_modules/gun/gun.js"></script> <!-- will always 404 -->
  <script>
    var gun = Gun(options);
    console.log(gun);
  </script>
</body>
</html>

嗯。碰巧我正在开发一种类似的应用程序

使用 koa-static 为您提供静态内容和 koa-router 为您提供 api 端点没有问题。我从来没有直接使用过koa-send。但我认为你也不需要,鉴于你的设置

唯一重要的是将中间件附加到 koa 应用程序时的顺序。尝试首先为您的资产(甚至 index.html)附加 koa-static,然后为您的 api 使用 koa-router。试图获取一些静态文件的请求永远不会到达路由器。这样路由器的唯一责任就是为您的api

服务

如果这不可行(例如,因为您有一堆非静态 html 文件到服务器,请考虑每个应用程序可以有多个路由器,甚至将一个嵌套在另一个中

(如果回答不够,给点时间煮个简单的例子,我会尽快post)

编辑:添加了一个快速而肮脏的示例 here。可能不是开箱即用,但足以让我明白