Node implementation flask like server framework. With the introduction of function decorators and classes we are able to make a small and easy to implement routing system. This is build on koa2 for their support of es2016 functionality and because of its small foot print when compared to express. I am using koa@2 because all routes are handled though blueprint classes and passing a context to a function as a parameter and allowing this
to still refer to the blueprint helps class logic. Even though we are using koa@2 you do not have to run you code though a compiler such as babel (though this step makes function decorators posible).
Main server to run blueprint classes. Extends Koa
Class from koa@2.
Option | type | description |
---|---|---|
port | Number |
Http port to listen on |
blueprints | `Object | Array |
Example
const { Server } = require("node-flask")
const MainRoutes = require("./MainRoutes")
const server = new Server({
port: 5000,
blueprints: [MainRoutes],
})
server.start()
Run server from configuration Example
const server = // ...from example above
server.start()
.then(() => console.log("Server online on port 5000"))
.catch(err => console.error(`An error occurred (such as port in use)`, err.stack))
Class decorator for blueprint class level configuration.
Handle all http requests on path.
Handle all GET http requests on path.
Handle all POST http requests on path.
Handle all PUT http requests on path.
Handle all PATCH http requests on path.
Handle all DELETE http requests on path.
Example (babel w/ transform-legacy-decorators)
const flask = require("node-flask")
@flask.prefix("/main", middlewarefunction)
class MainRoutes {
@flask.get("/home")
async home(ctx) {
const data = await getData()
ctx.body = data
}
}
Example (node6)
const flask = require("node-flask")
class MainRoutes {
constructor() {
this.prefix = "/main"
this.routes = flask.registerRoutes(this, {
home: flask.get("/home"),
})
}
*home(ctx) {
const data = yield getData()
ctx.body = data
}
}
- Write more tests for Server
- Add helpful middleware and more decorators upon need
Feedback, use cases and code is all appreciated. Simply make an issue or pull request on the github repo.