Koa.js - 提供静态文件和REST API

时间:2015-09-22 15:47:48

标签: javascript node.js rest static koa

我是koa.js图书馆的新手,我需要一些帮助。我正在尝试使用koa创建简单的REST应用程序。 我有一个静态html和javascript文件,我想在路由/上提供,REST API从/api/访问。

这是我的项目目录树:

project
├── server
│   ├── node_modules
│   ├── package.json
│   └── src
│       ├── config
│       ├── resources
│       └── server.js
├── ui
│   ├── app
│   ├── bower.json
│   ├── bower_components
│   ├── dist
│   ├── node_modules
│   ├── package.json
│   └── test

这是我的来源:

var app = require('koa')();
app.use(mount('/api/places', require('../resources/places')));

// does not work
var staticKoa = require('koa')();
staticKoa.use(function *(next){
  yield next;
  app.use(require('koa-static')('../ui/app', {}));
});
app.use(mount('/', staticKoa));

// does not work
app.use(mount('/', function*() {
    app.use(require('koa-static')('../ui/app/', {}));
}));

// does not work
app.use(mount('/', function*() {
    app.use(require('koa-static')('.', {}));
}));
// GET package.json -> 404 not found

我已经尝试了koa-statickoa-static-folderkoa-static-server图书馆,但两者都没有用,所以我做错了。

我已尝试过此功能,但无法访问我的REST API:

var app = require('koa')();
app.use(require('koa-static')('../ui/app/', {}));

3 个答案:

答案 0 :(得分:15)

我在你的示例代码中跟踪你正在做的事情有点困难...... 这是一个简单的例子,可以满足您的所有需求:

UpdateView

答案 1 :(得分:2)

来自@Nurpax的评论:

app.use(async function (ctx, next) {
  return send(ctx, '/index.html', { root: paths.client()
})
.then(() => next()) }) 

关键是指定{root:<some path>}。我认为我的问题是,出于安全原因,send不允许项目树之外的相对路径或路径。指定根参数然后给出相对于该文件的文件名似乎可以解决问题。我想我希望koa-send在节点输出上记录关于此的错误/警告。

答案 2 :(得分:1)

const root = require('path').join(__dirname, 'client', 'build');
app.use(serve(root));

app.use(async ctx => {
    await send(ctx, `/index.html`, {
        root
    });
});