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

时间:2016-10-07 23:46:23

标签: javascript node.js koa

问题:

  1. 如何设置静态文件,以便我的app2可以看到这两个目录。
  2. 当我发出AJAX Get请求时,如何使用koa-router而不是repo文件访问默认路由时发送index.html
  3. 要求:

    我需要在我的应用index.html

    中显示静态目录
    • .json需要为js libs打开。
    • src/index.html需要对图片开放。

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

    • 1)提供初始node_modules

    • 2)CRUD端点到我的数据库。

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

    目录结构:

    directory structure

    中间件:

    src/assets

    index.html

    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);
    

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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