1.下载需要的插件--最好把下面带babel字样的全都下载了)
2.配置.babelrc
{
"presets": [
"env",
"stage-0"
],
"plugins": [
"transform-decorators-legacy",
"transform-runtime",
"transform-class-properties"
]
}
3.decorator.js
import KoaRouter from 'koa-router'
export function Request({url, method}) {
return function (target, name, descriptor) {
let fn = descriptor.value
descriptor.value = (router) => {
router[method](url, async(ctx, next) => {
await fn(ctx, next)
})
}
}
}
export const RequestMethod = {
GET: 'get',
POST: 'post',
PUT: 'put',
DELETE: 'delete'
}
export function Controller({prefix}) {
let router = new KoaRouter()
if (prefix) {
router.prefix(prefix)
}
return function (target) {
let reqList = Object.getOwnPropertyDescriptors(target.prototype)
for (let v in reqList) {
// 排除类的构造方法
if (v !== 'constructor') {
let fn = reqList[v].value
fn(router)
}
}
return router
}
}
4.routes目录下的index.js
import {Controller, Request, RequestMethod} from '../decorator'
@Controller({prefix: '/hello'})
class HelloController{
@Request({url: '/', method: RequestMethod.GET})
async hello(ctx) {
ctx.body = 'Hello World'
}
}
module.exports = HelloController
以上几个步骤很多博客都写的挺详细,就不赘述了
重点是怎么use******
5.server目录下的index.js
var Koa = require('koa');
var app = new Koa();
var HelloController = require('./routes');
app
.use(HelloController.routes())
.use(HelloController.allowedMethods());
app.listen(3000)
console.log('app started at port 3000...');
6.启动文件start.js(该下的插件---上图有,请回看)
require('babel-core/register')()
require('babel-polyfill')
require('./server/index.js')
7.控制台打印 node start
文件树是这样的: