我现在正在用Express写一个REST API。我一直在阅读Koa.js,这听起来很有趣,但我似乎无法弄清楚如何用Koa.js编写适当的ES6功能。我正在尝试制作一个结构化的应用程序,这就是我现在所拥有的:
注意:我正在使用koa-route包,
let koa = require('koa');
let route = require('koa-route');
let app = koa();
class Routes {
example() {
return function* () {
this.body = 'hello world';
}
}
}
class Server {
constructor(port) {
this.port = port;
}
addGetRequest(url, func) {
app.use(route.get('/', func());
}
listen() {
app.listen(this.port);
}
}
const port = 8008;
let routes = new Routes();
let server = new Server(port);
server.addGetRequest('/', routes.example);
server.listen();
它有效,但外观和感觉笨重。有更好的方法吗?
答案 0 :(得分:3)
仅仅因为ES6有类,它并不意味着你绝对必须使用它们,因为它们可能不是正确的工具。 :)
以下是我通常如何做的一个例子。请注意,它不是 方式,而不是 方式。
// api/exampleApi.js
const controller = {
getExample: (ctx) => {
ctx.body = { message: 'Hello world' };
}
}
export default function (router) {
router.get('/example', controller.getExample);
}
// server.js
import Koa from 'koa';
import KoaRouter from 'koa-router';
import exampleApi from 'api/exampleApi';
const app = new Koa();
const router = new KoaRouter();
exampleApi(router);
app.use(router.routes());
app.listen(process.env.PORT || 3000);
请注意:此示例基于Koa 2和Koa Router 7。