Ghost Tales: adventures in Node.js

Ghost Tales: adventures in Node.js

Ghost is an open source blogging platform built in Node.js and aimed at a wide range of users. Node.js is still a relatively young platform for building web software. The combination of creating user-facing software with a less mature tool presents a particularly interesting set of challenges.

Building Ghost is an adventure, I'd like to share with you a few of the things I've learned so far...

13bc3aed226e3d7b0d262e5664468f50?s=128

Hannah Wolfe

May 16, 2014
Tweet

Transcript

  1. tales adventures in node.js

  2. @ErisDS on the Internet. I’m Hannah,

  3. None
  4. None
  5. None
  6. Just a Blogging Platform

  7. None
  8. Design-led Open source Nyantocat © 2014 GitHub Inc, All rights

    reserved
  9. Free,  Open Source, Non Profit & Sustainable

  10. The challenge

  11. Dynamic admin, static(ish) blog

  12. Great user experience

  13. Simple install

  14. Extensible

  15. Why ?

  16. Why not PHP?

  17. Node.js is super fast

  18. JavaScript

  19. The Socialite © 2014 GitHub Inc, All rights reserved Javascript

    community & ecosystem
  20. Node.js challenges

  21. Hosting isn't straightforward

  22. Less mature software

  23. Lack of conventions

  24. Choosing a data layer

  25. Native binaries

  26. Ghost architecture

  27. JSON API Client Server Blog Database Admin

  28. Database

  29. Database

  30. Database

  31. Database Native Binaries

  32. Database

  33. JSON API Client Server Blog Admin SQLite MySQL PostgreSQL

  34. SQLite MySQL PostgreSQL JSON API

  35. SQLite MySQL PostgreSQL JSON API Knex

  36. SQLite MySQL PostgreSQL JSON API Knex Bookshelf

  37. SQLite MySQL PostgreSQL JSON API Knex Bookshelf Models

  38. SQLite MySQL PostgreSQL JSON API Knex Bookshelf Models Migration, Export

    Import
  39. JSON API Client Server Blog Admin SQLite MySQL PostgreSQL Bookshelf

    & Knex
  40. JSON API

  41. JSON API Client HTTP GET /api/posts/

  42. JSON API Client Server HTTP module() GET /api/posts/ api.posts.browse()

  43. JSON API Client Server HTTP module() App.ghost App GET /api/posts/

    api.posts.browse() api.posts.browse()
  44. JSON API Client Server HTTP module() App.ghost App GET /api/posts/

    api.posts.browse() api.posts.browse()
  45. JSON API Client Server Blog Admin SQLite MySQL PostgreSQL Bookshelf

    & Knex HTTP module()
  46. jsonapi.org

  47. JSON API Client Server Blog Admin SQLite MySQL PostgreSQL Bookshelf

    & Knex HTTP module()
  48. Server Blog Server

  49. Server

  50. JSON API Client Server Blog Admin SQLite MySQL PostgreSQL Bookshelf

    & Knex HTTP module() Express
  51. Client

  52. JSON API Client Server Blog Admin SQLite MySQL PostgreSQL Bookshelf

    & Knex HTTP module() Express Ember.js
  53. JSON API Client Server Blog Admin SQLite MySQL PostgreSQL Bookshelf

    & Knex HTTP module() Express Ember.js Handlebars
  54. Code structure

  55. DocPad

  56. JS Bin

  57. NodeBB

  58. Node-RED

  59. Ghost

  60. Ghost : core

  61. Ghost : core : server

  62. Ghost : core : client

  63. Testing • Mocha - https://github.com/visionmedia/mocha • Should - https://github.com/visionmedia/should.js/ •

    Supertest - https://github.com/visionmedia/supertest • Rewire - https://github.com/jhnns/rewire
  64. Is the future?

  65. Get stuck in!

  66. Visit Ghost.org Subscribe to the dev blog: dev.ghost.org

  67. TryGhost/Ghost.git Find us on GitHub

  68. Freenode #ghost Join our community in IRC #ghost

  69. Hannah Wolfe @ErisDS | hannah@ghost.org | dev.ghost.org