题:
如何设置我的静态文件,以使两个目录都对我的index.html
可见。
当我发出AJAX Get请求时,使用koa-router而不是index.html
文件命中默认路由时,如何发送我的.json
?
要求:
我需要静态目录在我的应用程序中可见src/index.html
node_modules
需要为js库打开。src/assets
需要为图像打开。
我需要2个目的的路由器:
1)提供最初的index.html
2)CRUD端点到我的数据库。
注意:我完全愿意添加/减去任何中间件。但是,我宁愿不更改组织目录的方式。
目录结构:
中间件:
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/