Void Scroll
Void Scroll

Reputation: 41

Cannot find require path to custom module

I am trying to create a chatbot for a VoIP solution using NodeJS, I recently refactored all conversation handlers in their separate scripts for ease of reading on the entry point.

Those conversation handlers are structured as follows:

// foobar.js
const Help = require('.../utils/Help.js');
const Utils = require('.../utils/Utils.js');
const UserList = require('.../database/Users.json');

module.exports = {
    conversation: (message) => {
        // Code here
    }
    // other cool methods
}

This is what my folder architecture looks like: (important files are *marked*)

/chatbot
  /src
    /bin
      /conversation
          *foobar.js*
          foobarbar.js
          etc.js
    /database
      *Users.json*
    /utils
      *Help.js*
      *Utils.js*
    /node_modules

To me, it seems like I target the files I require correctly, however, on runtime, I am greeted with a splendid error

internal/modules/cjs/loader.js:605
throw err;
^

Error: Cannot find module '.../utils/Help.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:603:15)
    at Function.Module._load (internal/modules/cjs/loader.js:529:25)
    at Module.require (internal/modules/cjs/loader.js:658:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (D:\Library\Documents\AIScroll\src\bin\conversation\foobar.js:1:76)
    at Module._compile (internal/modules/cjs/loader.js:722:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)

No matter how many dots I put in .../utils/Help.js, I always have the same error. Whether there is only one or there are fifteen. I bet it's a really silly mistake, too. Cheers ahead of time ♪

Upvotes: 1

Views: 704

Answers (3)

NullDev
NullDev

Reputation: 7303

./ = Current folder
../ = One folder up
../../ = Two folders up and so on...

So your code needs to be as follows:

const Help = require('../../utils/Help.js');
const Utils = require('../../utils/Utils.js');
const UserList = require('../../database/Users.json');

Multiple dot's wont work. It's always either ./ or ../.
You can however write ../ multiple times.

Upvotes: 1

Jai
Jai

Reputation: 74738

I suppose you have to get up to 2 levels:

const Help = require('../../utils/Help.js');
const Utils = require('../../utils/Utils.js');
const UserList = require('../../database/Users.json');

Upvotes: 0

Almatrass
Almatrass

Reputation: 125

It should be ../../utils/Help.js etc.

The utils folder is 2 directories up

Upvotes: 0

Related Questions