Slide 1

Slide 1 text

Aspect Oriented Programming with FeathersJS

Slide 2

Slide 2 text

Why Aspect?

Slide 3

Slide 3 text

Why Aspect ... var express = require('express'); var app = express(); app.update('/', function (req, res, next) { if (isLoggedln(req) && isValidate(req)) { getUser(req.params.userId).then(function (user) { if (isAdmin(user) && isCurrent(user)) { updateInfo(req).then(function (info) { if (info.emailme) { sendEmail(user.email, info) } removePassword(user); res.send(info); }) } }); } }); because systems grow

Slide 4

Slide 4 text

@abraao4lves Software Engennier abraaoalves.github.io

Slide 5

Slide 5 text

Inspiration: Functional Programming f(g(x))

Slide 6

Slide 6 text

Continuation–passing style (CPS)

Slide 7

Slide 7 text

Continuation–passing style (CPS) let createUser = validateRequest >> verifyEmail >> db.createUser >> smtpServer.sendEmail >> returnMessage F# Example:

Slide 8

Slide 8 text

(CPS) with NodeJS ?

Slide 9

Slide 9 text

var express = require('express'); var bodyParser = require('body-parser'); var app = express(); app .use(bodyParser.json()) .use(function (req, res, next) { getUser(req.params.userId).then(function(user){ req.body.username = user.name; next() }) }) .use(function (req, res) { res.json(req.body || {message:'No content'}) }) (CPS) with NodeJS! Express - Middlewares

Slide 10

Slide 10 text

var express = require('express'); var bodyParser = require('body-parser'); var app = express(); app .use(bodyParser.json()) .use(function (req, res, next) { getUser(req.params.userId).then(function(user){ req.body.username = user.name; next() }) }) .use(function (req, res) { res.json(req.body || {message:'No content'}) }) (CPS) with NodeJS! Express - Middlewares

Slide 11

Slide 11 text

And ... Aspect Oriented Programming?

Slide 12

Slide 12 text

Aspect Oriented Programming!

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

Get Starter

Slide 15

Slide 15 text

(CPS) with FeathersJS

Slide 16

Slide 16 text

(CPS) with FeathersJS // Register the hooks app.service('users') .before({ find: [isLoggedIn, isAdmin], get: [isLoggedIn, isCurrent], create: hashPassword }) .after(removePasswords) .after({ create: sendEmail });

Slide 17

Slide 17 text

(CPS) with FeathersJS // Register the hooks app.service('users') .before({ find: [isLoggedIn, isAdmin], get: [isLoggedIn, isCurrent], create: hashPassword }) .after(removePasswords) .after({ create: sendEmail });

Slide 18

Slide 18 text

(CPS) with FeathersJS // Register the hooks app.service('users') .before({ find: [isLoggedIn, isAdmin], get: [isLoggedIn, isCurrent], create: hashPassword }) // To all methods .after(removePasswords) .after({ create: sendEmail });

Slide 19

Slide 19 text

DEMO

Slide 20

Slide 20 text

Thanks. @abraao4lves abraaoalves.github.io