Build a widget and plugin

NodeBB Development
  • Re: NodeBB For a Complete Beginner
    ^ Quite a few years have past since this post, I'm at the same stage than @AccessDenied. I have dev experience, yet I'm lost without any proper explanation around the data flows for NodeBB.

    I want to:

    • Keep records of a mapping between a NodeBB userId and an external user Id extUserID. (using Mongo)
    • Build a Widget that will fetch external data (using this extUserID) and show this custom data for each user.

    I've had a look at many widgets, but I still quite don't get how the data flows from the back to the front-end. e.g to get user data here this widget calls user.getUidsFromSet.

    Now my dumb questions:

    • How do I let the front-end access user data such as this extUserId? Is there a list of those methods somewhere?
    • Can I, and if yes, how can I add this additional property in Mongo to store this extUserId. I get that I can add it manually to mongo but how to let users fill it. This would represent an additional field in the user profile I imagine.
    • From the front-end, how can I alter the DB? There's an api as far as I know but I didn't find info on it.
    • Can you point me to a widget that has similar structure/needs
  • I believe there are two systems for data flow from backend to frontend.

    1. Templates. You can pass data to the renderer as a js object and fill the template with it. Use curly brackets to refer to it.
      Square brackets will give you a translated string.
      For more on templates look here

    2. Websockets. It's not anything unique to NodeBB, so there should be no trouble finding documentation of socket.io
      Have an example of a plug-in using them: frontend and backend

    Both systems work with widgets, so choose the option you prefer. The templates seem better if the data you want to load isn't supposed to change after the page loaded (there is lazy loading if you want to use it though), while with websockets you will have some delay between page load and data getting from backend to frontend, but you can request it dynamically without any reloads.

    Edit: if you just need some more data about an user or something there is also the api - basically you get json data from almost any page you prepend /api/ to. For example community.nodebb.org/api/user/oplik0

  • @oplik0 oof those template docs are really outdated. I need to do some work to bring them up to date.

    In the meantime, please refer to the Benchpress docs instead: https://github.com/benchpressjs/benchpressjs/blob/master/docs/readme.md

  • Thank you so much for the replies. I'll dig into that again and probably come back with other questions 🙂


Suggested Topics