题:


如何设置我的静态文件,以使两个目录都对我的index.html可见。
当我发出AJAX Get请求时,使用koa-router而不是index.html文件命中默认路由时,如何发送我的.json


要求:

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


node_modules需要为js库打开。
src/assets需要为图像打开。


我需要2个目的的路由器:


1)提供最初的index.html
2)CRUD端点到我的数据库。


注意:我完全愿意添加/减去任何中间件。但是,我宁愿不更改组织目录的方式。

目录结构:

javascript - 设置静态 Assets 路径,使用koa和各种中间区路由端点-LMLPHP

中间件:


koa-static //无法提供node_modules + src目录。
koa-send //可以发送静态文件,但是会破坏koa-static
koa-router //不能


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为您的api端点提供静态内容和koa-router没问题。我从未直接使用过Koa发送。但我认为您也无需设置

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

如果那是不可能的(例如,由于您要在服务器上放置一堆非静态html文件,请考虑每个应用可以拥有多个路由器,甚至可以将一个路由器嵌套在另一个路由器中)

(如果答案还不够,请花点时间做一个简单的例子。我会尽快发布)

编辑:添加了一个快速而肮脏的示例here。也许它不是开箱即用的,但是足以理解这个想法

关于javascript - 设置静态 Assets 路径,使用koa和各种中间区路由端点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39927210/

10-11 09:28