create-server.js 2.2 KB

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