问题:
-
如何设置静态文件,以便我的
index.html
可以看到这两个目录 . -
当我发出AJAX Get请求时,当你使用koa-router而不是
.json
文件命中默认路由时,如何发送index.html
?
Requirements:
我需要在我的应用程序中显示静态目录 src/index.html
需要为js libs打开
-
node_modules
. -
src/assets
需要对图像开放 .
我需要一个路由器用于两个目的:
-
1)提供最初
index.html
-
2)CRUD endpoints 到我的数据库 .
注意:我完全愿意添加/减去任何中间件 . 但我宁愿不改变我组织目录的方式 .
Directory Structure:
Middleware:
-
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>
1 回答
好 . 碰巧我正在开发一种类似的应用程序
使用koa-static为你的api endpoints 提供静态内容和koa-router没有问题 . 我从未直接使用过koa-send . 但考虑到你的设置,我认为你也不需要
唯一重要的是将中间件附加到koa应用程序时的顺序 . 尝试首先为您的资产附加koa-static(甚至可能是index.html),然后为您的api使用koa-router . 尝试获取某些静态文件的请求永远不会到达路由器 . 这样路由器只负责为你的api服务
如果那不可行(例如,因为你有一堆非静态html文件到服务器,考虑一下你可以为每个应用程序设置多个路由器,甚至将一个嵌套在另一个内部
(如果答案还不够,请花点时间做一个简单的例子 . 我会尽快发布)
编辑:添加了一个快速而肮脏的例子here . 可能它不足以得到这个想法