-
Notifications
You must be signed in to change notification settings - Fork 1
/
example.js
87 lines (78 loc) · 1.54 KB
/
example.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
'use strict'
// eslint-disable-next-line
const Fastify = require('fastify')
const plugin = require('./')
function hemeraActions(fastify) {
fastify.hemera.add(
{
topic: 'math',
cmd: 'add'
},
function handler(req, reply) {
reply(null, { result: req.a + req.b })
}
)
}
function routes(fastify) {
fastify.route({
method: 'GET',
url: '/reply',
schema: {
querystring: {
a: { type: 'integer' },
b: { type: 'integer' }
}
},
handler: (req, reply) => {
req.log.info('Reply route')
reply.act({ topic: 'math', cmd: 'add', a: req.query.a, b: req.query.b })
}
})
fastify.route({
method: 'GET',
url: '/request',
schema: {
querystring: {
a: { type: 'integer' },
b: { type: 'integer' }
}
},
handler: (req) => {
req.log.info('Reply route')
return req.hemera
.act({
topic: 'math',
cmd: 'add',
a: req.query.a,
b: req.query.b
})
.then((resp) => resp.data)
}
})
}
function build(opts) {
const fastify = Fastify({ logger: opts.logger })
fastify
.register(plugin, {
hemera: opts.hemera,
plugins: opts.plugins,
nats: opts.nats
})
.after((err) => {
if (err) {
throw err
}
routes(fastify)
hemeraActions(fastify)
})
return fastify
}
if (require.main === module) {
const fastify = build({
logger: {
level: 'info'
}
})
fastify.listen(3000)
}
module.exports = build