create-server.js 2.1 KB

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