Hello guys, kali ini saya akan membahas tentang menggunakan bono framework, yg menurut saya penggunaan nya lebih mudah dibanding expressjs
Bono is light and modular Node.js web application framework (based on Koa.js) to develop api and website.
Getting Started
npm i bono
setelah itu kita buat satu file dengan nama index.js
const http = require('http');
const Bundle = require('bono');
const HTTP_PORT = 8888;
let app = new Bundle();
app.use(require('bono/middlewares/json')());
app.get('/', (ctx) => 'hello world');
let server = http.createServer(app.callback());
server.listen(HTTP_PORT, () => console.log(`server listen on port ${HTTP_PORT}`));
kemudian jalan kan node index.js
buka browser pada alamat localhost:8888
app adalah Bundle dari keseluruhan index /
Create modular Bundle
contoh kita akan membuat bundle dengan endpoint /api
atau /auth
localhost:8888/api/[params]
buat file baru dengan nama api.js
const Bundle = require('bono');
class Api extends Bundle {
constructor() {
super();
this.get('/', this.index.bind(this));
this.post('/halo', this.halo.bind(this));
this.get('/user/:idUser', this.getUser.bind(this));
}
getUser(ctx) {
return `get id user ${ctx.params.idUser}`;
}
halo() {
return 'Halo api post';
}
index(ctx) {
return 'Hello world from /api';
}
}
module.exports = new Api();
kemudian tambahkan di file index.js
tadi
const api = require('./api');
app.bundle('/api', api);
full code
const http = require('http');
const Bundle = require('bono');
const HTTP_PORT = 8888;
const api = require('./api');
let app = new Bundle();
app.use(require('bono/middlewares/json')());
app.bundle('/api', api); // <--=-== Here
app.get('/', (ctx) => 'hello world');
let server = http.createServer(app.callback());
server.listen(HTTP_PORT, () => console.log(`server listen on port ${HTTP_PORT}`));
eksekusi node index.js
, buka browser dan arahkan ke endpoint /api/user/2..
untuk method seperti this.get() ada get()
,post()
,put()
,patch()
,delete()
Middleware
penggunaan middleware, contoh memverifikasi user atau memberi authentikasi dengan JWT pada setiap user yg akan mengakses ke endpoint `/api
buat file middlewareAuth.js
const jwt = require('jsonwebtoken');
module.exports = async function(ctx, next) {
let token = ctx.get('Authorization').split(' ').pop();
if (!token) {
ctx.throw(401);
}
try {
let verify = jwt.verify(token, 'secret key');
ctx.state.user = { ...verify };
} catch (error) {
ctx.throw(401);
}
await next();
}
ctx.state.user
akan ada selalu di setiap context bundle
setelah itu masukan middleware nya di bundle yg ingin kalian beri authentikasi, pada file index.js
const middlewareAuth = require('./middlewareAuth')
api.use(middlewareAuth);
// disini bundle `api` menggunakan authorization
selesai deh,
const http = require('http');
const Bundle = require('bono');
const middlewareAuth = require('./middlewareAuth')
const HTTP_PORT = 8888;
const api = require('./api');
let app = new Bundle();
app.use(require('bono/middlewares/json')());
api.use(middlewareAuth);
app.bundle('/api', api); // <--=-== Here
app.get('/', (ctx) => 'hello world');
let server = http.createServer(app.callback());
server.listen(HTTP_PORT, () => console.log(`server listen on port ${HTTP_PORT}`));
untuk liat full source code DEMO nya bisa langsung liat DISINI
Sekian dan terimakasih, untuk bertanya2 silahkan komen dibawah