vex
vex copied to clipboard
Easy-to-use, modular web framework built for V
Easy-to-use, modular web framework for V.

module main
import nedpals.vex.router
import nedpals.vex.server
import nedpals.vex.ctx
fn print_req_info(mut req ctx.Req, mut res ctx.Resp) {
println('${req.method} ${req.path}')
}
fn do_stuff(mut req ctx.Req, mut res ctx.Resp) {
println('incoming request!')
}
fn main() {
mut app := router.new()
app.use(do_stuff, print_req_info)
app.route(.get, '/', fn (req &ctx.Req, mut res ctx.Resp) {
res.send_file('index.html', 200)
})
app.route(.get, '/public/*path', fn (req &ctx.Req, mut res ctx.Resp) {
res.send_file('public/' + req.params['path'], 200)
})
app.route(.get, '/path/:name', fn (req &ctx.Req, mut res ctx.Resp) {
println('path is ${req.params["name"]}')
}, fn (req &ctx.Req, mut res ctx.Resp) {
res.send('path: ' + req.params['name'], 200)
})
app.route(.get, '/complex/:name/*path', fn (req &ctx.Req, mut res ctx.Resp) {
res.send('username: ' + req.params['name'] + '\npath: ' + req.params['path'], 200)
})
server.serve(app, 6789)
}
Installation & Getting Started
Learn how to setup and use VEX by reading the Wiki.
Roadmap
- [X] Support for
GET,POST,PUT,PATCH,DELETE, andOPTIONHTTP methods. - [x] HTTP Router (Wildcards are now supported)
- [x] Route groups (non-reusable for now)
- [x] ~~Static file server~~
- [x] Params and query parsing
- [x] Middleware support
- [x] Cookie parsing (basic support)
- [x] Cookie manipulation / Session support
- [ ] Websocket Server
- [x] Body parsing
- [x]
application/x-www-form-urlencodedsupport - [x]
application/jsonsupport - [x]
multipart/form-datasupport
- [x]
Contributing
- Fork it (https://github.com/nedpals/vex/fork)
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
Examples
Examples can be found at the /examples directory.
License
MIT
Contributors
- Ned Palacios - creator and maintainer