Skip to content

Technical Support

Need help with installing or configuring NodeBB? Look here.

4.7k Topics 26.2k Posts

Subcategories


  • User documentation for NodeBB

    44 Topics
    44 Posts
    Jay MoonahJ

    One of the first important things to do after setting up NodeBB is to set up an emailer plugin. While NodeBB does include a local emailer, if your forum is particularly active we recommend using an third-party emailer such as SendGrid which provides better deliverability for sites that send a high volume of email. Setting up SendGrid in NodeBB is very easy.

    Open the administrative dashboard using the 'gear' icon on your forum. Open the Extend > Plugins menu, and select the Find Plugins tab. Use the search on the right. Type 'SendGrid' and the plugin should appear -- select Install when you see it. From Installed tab on the Plugins menu, search again for 'SendGrid' and select Activate. Activating the plugin will require a restart of your forum. To restart, select the Dashboard menu and press the Restart button to the right. After NodeBB restarts, the SendGrid plugin will be active.

    After you restart, there should be a item called Emailer (SendGrid) under the Plugins menu -- if you don't see this right away, try refreshing your browser.

    Sign up to SendGrid

    Go to the SendGrid website, open the pricing page and scroll to the bottom. Click on the link and create your free account. Once you've confirmed your SendGrid account via email, you should be able to login to the SendGrid website. On the left side of your SendGrid dashboard, open Settings and click on API Keys. Click the button in the top right to create a new key. Make sure that the key has Full Access for Send Mail and Alerts.  When you are done, the new key to your clipboard.

    Now, return to the SendGrid menu on your NodeBB admin panel. Paste the API key into the field, and save your changes. Now go back to the Dashboard to restart your forum one more time.

    SendGrid should now be working for your forum.

    YouTube Setting up SendGrid mailer for NodeBB

  • NodeBB guides, how-to's and general tips and tricks

    82 Topics
    599 Posts
    barisB

    Quick start plugin has an example on how to add a new api route https://github.com/NodeBB/nodebb-plugin-quickstart/blob/master/library.js#L40-L76.

    The hooks that are fired client side are for client side code in plugins. If you want to pass data from the client to the server you have two options.

    Create an api route like in quick start plugin Create a new socket event listener on the server side and use socket.emit() client side. Example here
  • 25 Topics
    201 Posts
    eeeeeE

    I think you answered my point, by agreeing there are issues.
    I didn't even attempt to deploy nodebb, I had problems with much smaller projects!
    Nextjs routing was going through a change of design at the time, so perhaps that is less confusing now, but there were multiple other headaches. I would get build errors and issues with package management.

  • upgrading from v1.0.1-auto.0 to v1.0.1

    3
    0 Votes
    3 Posts
    1k Views
    ljhardyL

    Did that successfully. Upgrade seemed to go ok, then received these errors trying to start nodebb, it's like the upgrade script didn't work: ( Can I reinstall the latest version of nodebb, and have it keep my setup, users, posts etc., or does a clean install initialize Mongodb?)

    Starting NodeBB
    "./nodebb stop" to stop the NodeBB server
    "./nodebb log" to view server output
    "./nodebb restart" to restart NodeBB

    ljhardy@firehole:~/www/nodebb/nodebb$ ./nodebb log

    Type Ctrl-C to exit

    Clustering enabled: Spinning up 1 process(es).

    27/3 10:24 [20828] - info: Time: Sun Mar 27 2016 10:24:35 GMT-0500 (CDT)
    27/3 10:24 [20828] - info: Initializing NodeBB v1.0.2
    27/3 10:24 [20828] - warn: You have no mongo password setup!
    27/3 10:24 [20828] - info: [database] Checking database indices.
    [outdated] html-to-text installed v1.5.0, package.json requires 2.0.0
    27/3 10:24 [20828] - warn: One or more of NodeBB's dependent packages are out-of-date. Please run the following command to update them:
    27/3 10:24 [20828] - warn: ./nodebb upgrade
    [cluster] Child Process (20828) has exited (code: 0, signal: null)

  • Error when accessing group

    1
    0 Votes
    1 Posts
    683 Views
    lullerhausL

    When i try to access /groups/administrators (group is set visible), i get following error:

    /groups/administrators Not Found You seem to have stumbled upon a page that does not exist. Return to the home page.

    Here's query from database: http://paste.kde.org/pyoyy68xj/1hvqu0

    Any ideas how to fix this?

  • Testing ground is broken on mobile

    1
    1 Votes
    1 Posts
    592 Views
    E

    I cant enter testing ground forum. It breaks mobile safari. Tested on both i got 🐼
    Others subforums works ok

  • easy nodebb upgrade process

    Solved
    30
    0 Votes
    30 Posts
    12k Views
    Charly86C

    @charles
    Perfect, thanks 😉

  • This topic is deleted!

    1
    0 Votes
    1 Posts
    2 Views
  • adding and using library

    7
    1 Votes
    7 Posts
    2k Views
    C

    @yariplus said:

    As far as uploading the library, everything in the /public directory is exposed on the website root. So, you can generally put the library anywhere in there.

    This is what I was looking for! Thanks!

    As for loading a js file at the end right before the closing body, which file should I place the script tag?

  • Load slackin badge in widget

    1
    0 Votes
    1 Posts
    925 Views
    P

    https://github.com/rauchg/slackin

    I'm trying to add the badge it adds to a widget, but it doesn't load/can't find the script tag. Currently I'm using this:

    <script async defer src="https://slack.yourdomain.com/slackin.js"></script>

    Content of slackin.js

    (function(){ // give up and resort to `target=_blank` // if we're not modern enough if (!document.body.getBoundingClientRect || !document.body.querySelectorAll || !window.postMessage) { return; } // search for a script tag pointing to slackin.js function search(){ var replaced = 0; var scripts = document.querySelectorAll('script'); var script; for (var i = 0; i < scripts.length; i++) { script = scripts[i]; if (!script.src) continue; if (/\/slackin\.js(\?.*)?$/.test(script.src)) { // replace script with iframe replace(script); // we abort the search for subsequent // slackin.js executions to exhaust // the queue return true; } } } var LARGE; // boolean for large/small mode, from query param // replace the script tag with an iframe function replace(script){ var parent = script.parentNode; if (!parent) return; LARGE = /\?large/.test(script.src); var iframe = document.createElement('iframe'); var iframePath = '/iframe' + (LARGE ? '?large' : ''); iframe.src = script.src.replace(/\/slackin\.js.*/, iframePath); iframe.style.borderWidth = 0; iframe.className = '__slackin'; // a decent aproximation that we adjust later // once we have the knowledge of the actual // numbers of users, based on a user count // of 3 digits by 3 digits iframe.style.width = (LARGE ? 190 : 140) + 'px'; // height depends on target size iframe.style.height = (LARGE ? 30 : 20) + 'px'; // hidden by default to avoid flicker iframe.style.visibility = 'hidden'; parent.insertBefore(iframe, script); parent.removeChild(script); // setup iframe RPC iframe.onload = function(){ setup(iframe); }; } // setup an "RPC" channel between iframe and us function setup(iframe){ var id = Math.random() * (1 << 24) | 0; iframe.contentWindow.postMessage('slackin:' + id, '*'); window.addEventListener('message', function(e){ if (typeof e.data !== 'string') return; // show dialog upon click if ('slackin-click:' + id === e.data) { showDialog(iframe); } // update width var wp = 'slackin-width:' + id + ':'; if (wp === e.data.substr(0, wp.length)) { var width = e.data.substr(wp.length); iframe.style.width = width + 'px'; // ensure it's shown (since first time hidden) iframe.style.visibility = 'visible'; } // redirect to URL var redir = 'slackin-redirect:' + id + ':'; if (redir === e.data.substr(0, redir.length)) { location.href = e.data.substr(redir.length); } }); } // show the dialog around the iframe // by, yes, creating a new iframe var showing = false; function showDialog(iframe){ if (showing) return; showing = true; if (LARGE) { unitSize = '14px'; arrowHeight = 13; } else { unitSize = '10px'; arrowHeight = 9; } // container div var div = document.createElement('div'); div.className = '__slackin'; div.style.fontSize = unitSize; div.style.border = '.1em solid #D6D6D6'; div.style.padding = '0'; div.style.margin = '0'; div.style.lineHeight = '0'; div.style.backgroundColor = '#FAFAFA'; div.style.width = '25em'; div.style.height = '15.5em'; div.style.position = 'absolute'; div.style.left = '-10000px'; div.style.top = '-10000px'; div.style.borderRadius = '.4em'; div.style.padding = '.4em'; div.style.boxSizing = 'content-box'; // new iframe var ni = document.createElement('iframe'); ni.className = '__slackin'; ni.style.width = '25em'; ni.style.height = '15.5em'; ni.style.borderWidth = 0; ni.src = iframe.src.replace('iframe', 'iframe/dialog'); ni.onload = function(){ setup(ni); window.addEventListener('scroll', dposition); window.addEventListener('resize', dposition); position(); }; // arrows var a1 = document.createElement('div'); var a2 = document.createElement('div'); [a1, a2].forEach(function(a){ a.style.border = 'solid transparent'; a.style.pointerEvents = 'none'; a.style.width = '0'; a.style.height = '0'; a.style.margin = '0'; a.style.padding = '0'; a.style.position = 'absolute'; a.style.display = 'inline'; }); a1.style.borderColor = 'rgba(214, 214, 214, 0)'; a2.style.borderColor = 'rgba(250, 250, 250, 0)'; a1.style.borderWidth = '.7em'; a1.style.marginLeft = '-.65em'; a2.style.borderWidth = '.6em'; a2.style.marginLeft = '-.6em'; // append div.appendChild(a1); div.appendChild(a2); div.appendChild(ni); document.body.appendChild(div); function position(){ [div, a1, a2].forEach(function(el){ el.style.left = ''; el.style.right = ''; el.style.bottom = ''; el.style.top = ''; }); var divPos = div.getBoundingClientRect(); var iframePos = iframe.getBoundingClientRect(); var divHeight = divPos.height + arrowHeight; var st = document.body.scrollTop; var sl = document.body.scrollLeft; var iw = window.innerWidth; var ih = window.innerHeight; var iframeTop = iframePos.top + st; var iframeLeft = iframePos.left + sl; // position vertically / arrows if (st + iframePos.bottom + divHeight > st + ih) { div.style.top = (iframeTop - divHeight) + 'px'; a1.style.top = a2.style.top = '100%'; a1.style.borderBottomColor = 'rgba(214, 214, 214, 0)'; a2.style.borderBottomColor = 'rgba(250, 250, 250, 0)'; a1.style.borderTopColor = '#d6d6d6'; a2.style.borderTopColor = '#fafafa'; } else { div.style.top = (iframeTop + iframePos.height + arrowHeight) + 'px'; a1.style.bottom = a2.style.bottom = '100%'; a1.style.borderTopColor = 'rgba(214, 214, 214, 0)'; a2.style.borderTopColor = 'rgba(250, 250, 250, 0)'; a1.style.borderBottomColor = '#d6d6d6'; a2.style.borderBottomColor = '#fafafa'; } // position horizontally var left = iframePos.left + Math.round(iframePos.width / 2) - Math.round(divPos.width / 2); if (left < sl) left = sl; if (left + divPos.width > sl + iw) { left = sl + iw - divPos.width; } div.style.left = left + 'px'; a1.style.left = a2.style.left = (iframeLeft - left + Math.round(iframePos.width / 2)) + 'px'; } // debounced positionining var timer; function dposition(){ clearTimeout(timer); timer = setTimeout(position, 100); } function hide(){ showing = false; window.removeEventListener('scroll', dposition); window.removeEventListener('resize', dposition); document.body.removeChild(div); document.documentElement.removeEventListener('click', click, true); } function click(ev){ if ('__slackin' != ev.target.className) { hide(); } } document.documentElement.addEventListener('click', click, true); } var found = search(); if (!found) setTimeout(search, 5000); })();

    If anyone here could help me getting this to work in a widget, I would be really thankful!
    Thanks.

  • Add icon to Font Awesome?

    3
    0 Votes
    3 Posts
    2k Views
    Danny McWilliamsD

    @ThingBreaker said:

    Here are steps on customizing Font Awesome. Mayhaps these will help.
    https://github.com/FortAwesome/Font-Awesome/wiki/Customize-Font-Awesome

    Thank you, I'll have a look. Would any updates of the forum affect Font-Awesome in future? Ideally, adding the icon in a way which wouldn't require updating the icons each time would be the best way forward.

  • Issues with post displaying html sometimes.

    16
    0 Votes
    16 Posts
    4k Views
    JenklerJ

    Yes, it works fine in v1.0.2 🙂

  • 0 Votes
    6 Posts
    3k Views
    B

    However, this is NO longer an issue with NodeBB 1.x since it's not using connect-mongo 1.x
    https://github.com/NodeBB/NodeBB/blob/0823cd94331a99b5c6ae5c696cd30215295f3a4c/package.json#L25

    it was an issue with 0.9.2.
    https://github.com/NodeBB/NodeBB/blob/v0.9.2/src/install.js#L16

  • Installing NodeBB on Ubuntu

    12
    0 Votes
    12 Posts
    6k Views
    Y

    Hi,

    As much as I'd like to say this was helpful, it wasn't. The most help I got was from the guy who told me how to open the folder.

    With that being said, I am nowhere near. The main cause of this is probably me and I blame myself for that. I will be now hoping to get an Ubuntu Server from HostingItAll, and they will be helping me set up NodeBB!

    Thanks for all that you guys could do.

    Lewis

  • Pushbullet

    4
    1 Votes
    4 Posts
    1k Views
    ?

    @MagicVish just run the command he wrote, while you are in your NodeBB directory in SSH.

  • 0 Votes
    1 Posts
    1k Views
    SamuraisS

    hi, Folks

    Could anyone take a look at my problem ?

    https://github.com/NodeBB/NodeBB/issues/4461

    I get stuck with the login and I want to use nodebb as a community BBS.

    I am appreciated if someone can help.

    Cheers.
    Hain

  • Schema changes 0.9.2 to 0.9.3 ?

    1
    0 Votes
    1 Posts
    663 Views
    C

    I have a local dev environment running 0.9.2 and another install running 0.9.3. Is it possible to just overwrite the DB on the 0.9.3 install or were there schema changes between these versions?

  • error: appears to be a git repo or submodule

    11
    0 Votes
    11 Posts
    7k Views
    frissdiegurkeF

    I don't see any problems there thought. Except for the bad value for main, it is supposed to be a javascript file; But since other NodeBB themes share this bad value it should not break anything. o_O

    After a quick search with the search engine of my choice I've found this stackoverflow question with a similar issue. There doesn't seem to be a solution but moving your repo out of node_modules and either symlink (by hand; as the answer describes) or npm link it.

  • submit button missing

    4
    0 Votes
    4 Posts
    954 Views
    barisB

    I wonder why that is not a check mark 😆

  • v1.0.2: Lavender Theme: ACP says it is 3.0.9 but it is not

    Solved
    10
    0 Votes
    10 Posts
    3k Views
    R

    @pichalite This is very odd.

    When I visit my dev forum from my iPhone (Safari) I see the correct fade out on long posts. When I visit my dev forum from my home Mac (using Safari) I also see the correct fade out. When I visit my dev forum from my office Windows PC (using Firefox) I do not see the correct fade out. Now for the odditity. If I visit my production forum from my same office Windows PC (using Firefox) I do see the correct fade out.

    Huh?

    Tips or clues on what to look at or caches to clear, etc?

    Thank you.

  • live view for file edit

    Solved
    5
    0 Votes
    5 Posts
    2k Views
    frissdiegurkeF

    $ npm i grunt grunt-contrib-watch

    I recommend using npm install (no further parameters) instead. Since those packages are listed within devDependencies they will be installed as long you don't add --production.

  • Basic New Theme

    Moved Unsolved
    15
    0 Votes
    15 Posts
    6k Views
    P

    @charles well looks like bootstrap is required

  • New users Google-sso dont work with v1.0.2

    2
    0 Votes
    2 Posts
    913 Views
    JenklerJ

    crap, i forgot to activate the google+ api 😛