create-server.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. const fastify = require("fastify")();
  2. const handlers = require("./handlers");
  3. fastify.register(require("@fastify/view"), {
  4. engine: {
  5. handlebars: require("handlebars")
  6. }
  7. });
  8. fastify.addHook('onRequest', (request, reply, done) => {
  9. reply.header("Server", "Fastify");
  10. done()
  11. })
  12. fastify.get("/json", {
  13. schema: {
  14. response: {
  15. 200: {
  16. type: 'object',
  17. properties: {
  18. message: { type: 'string' }
  19. }
  20. }
  21. }
  22. }
  23. }, (req, reply) => {
  24. reply
  25. .header("Content-Type", "application/json")
  26. .code(200)
  27. .send({ message: "Hello, World!" });
  28. });
  29. fastify.get("/plaintext", (req, reply) => {
  30. reply
  31. .header("Content-Type", "text/plain")
  32. .code(200)
  33. .send("Hello, World!");
  34. });
  35. const database = process.env.DATABASE;
  36. if (database) {
  37. const dbLayer = require(`./db/${database}`);
  38. const routerHandler = handlers(dbLayer);
  39. const itemSchema = {
  40. type: 'object',
  41. properties: {
  42. id: { type: 'integer' },
  43. message: { type: 'string' },
  44. randomNumber: { type: 'integer' }
  45. }
  46. }
  47. if (database === 'postgres') {
  48. // postgres return lowercase columns
  49. itemSchema.properties.randomnumber = { type: 'integer' };
  50. }
  51. const singleQuerySchema = {
  52. schema: {
  53. response:{
  54. 200: itemSchema
  55. }
  56. }
  57. }
  58. const multipleQueriesSchema = {
  59. schema: {
  60. response:{
  61. 200: {
  62. type: 'array',
  63. items: itemSchema
  64. }
  65. }
  66. }
  67. }
  68. const updateSchema = {
  69. schema: {
  70. response:{
  71. 200: {
  72. type: 'array',
  73. items: itemSchema
  74. }
  75. }
  76. }
  77. }
  78. fastify.get("/db", singleQuerySchema, routerHandler.singleQuery);
  79. fastify.get("/queries", multipleQueriesSchema, routerHandler.multipleQueries);
  80. fastify.get("/fortunes", routerHandler.fortunes);
  81. fastify.get("/updates", updateSchema, routerHandler.updates);
  82. }
  83. fastify.listen({ port: 8080, host: "0.0.0.0" }, (err, address) => {
  84. if (err) {
  85. throw err;
  86. }
  87. console.log(
  88. `Worker started and listening on ${address} ${new Date().toISOString()}`
  89. );
  90. });