How can I import custom files in libary.js?
-
Hey!
I want to read out a file inside my plugin:
const fs = require("fs"); const config = JSON.parse(fs.readFileSync("./utils/config.json", "utf-8"));
My Folder-Structure looks like this:
ubuntu@ubuntu:~/nodebb-linked-modules/nodebb-plugin-sync-bot$ ls lib library.js node_modules package.json plugin.json static utils
Inside of
utils
is the fileconfig.json
which I have to read via the fs.const config = JSON.parse(fs.readFileSync("./utils/config.json", "utf-8"));
On startup I receive the following error:
error: Error: ENOENT: no such file or directory, open './utils/config.json'
How can I import files in the same directory to work with it?
I checked the file permissions. They are identical.
Looking forwar to your answers.
-
@pitaj Many thanks for your effort
Okay so I just
npm link
'ed my plugin again so I thought some file will be updated. But they weren't.Here is my full source code of
libary.js
:'use strict'; /* NodeBB Basic Plugin Libraries */ const controllers = require('./lib/controllers'); const plugin = {}; /* Third Party Libraries */ const Discord = require("discord.js"); const fs = require("fs"); // Nodebb Discord Bot const config = JSON.parse(fs.readFileSync("./utils/config.json", "utf-8")); var client = new Discord.Client(); let debug = true; plugin.init = function (params, callback, client) { myDebug("nodebb-discord-bot-started"); callback(); }; function myDebug(msg){ if(debug){ console.log(msg); } } module.exports = plugin;
2021-01-12T10:46:19.318Z [4567/4689] - error: Error: ENOENT: no such file or directory, open './utils/config.json' at Object.openSync (fs.js:462:3) at Object.readFileSync (fs.js:364:35) at Object.<anonymous> (/home/ubuntu/nodebb-linked-modules/nodebb-plugin-makesmart-discord-bot/library.js:15:30) at Module._compile (internal/modules/cjs/loader.js:999:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10) at Module.load (internal/modules/cjs/loader.js:863:32) at Function.Module._load (internal/modules/cjs/loader.js:708:14) at Module.require (internal/modules/cjs/loader.js:887:19) at require (internal/modules/cjs/helpers.js:74:18) at Object.Plugins.requireLibrary (/home/ubuntu/nodebb/src/plugins/index.js:70:39)
I tried it with
path
again:// Nodebb Discord Bot var configpath = path.join(__dirname, 'utils', 'config.json'); const config = JSON.parse(fs.readFileSync(configpath, "utf-8")); var client = new Discord.Client();
an suddenly ... it worked! o.O
2021-01-12T10:51:15.711Z [4567/4765] - info: [api] Adding 2 route(s) to `api/v3/plugins` 2021-01-12T10:51:15.889Z [4567/4765] - info: Routes added 2021-01-12T10:51:15.933Z [4567/4765] - info: NodeBB Ready 2021-01-12T10:51:15.943Z [4567/4765] - info: Enabling 'trust proxy' 2021-01-12T10:51:15.972Z [4567/4765] - info: NodeBB is now listening on: 0.0.0.0:4567
I think it was really because I ran npm link again. Funny.* I'm sorry. Most of the time, the problem is in front of the computer.
But still a strange behavior in my opinion. Well ... Good to know for the future. @PitaJ as mentioned thank you for you effort.
For any others having the same issue:
- Read the Stackoverflow Solution posted by @PitaJ right here
- If it still not work use
npm link
in./nodebb
again to refresh something in the plugin folder ...I dont know tbh ...
-
NodeJS accessing file with relative path
It seemed like a straight forward problem. But I amn't able to crack this. Within helper1.js I would like to access foobar.json (from config/dev/) root -config --dev ---foobar.json -hel...
Stack Overflow (stackoverflow.com)
-
@pitaj My folder with the
config.json
is in the same directory aslibrary.js
is. I tried it withpath
but it didn't work either.my-plugin āāā library.js āāā utlis āāā config.json
var configpath = path.join(__dirname, 'utils', 'config.json');
Results also in:
error: Error: ENOENT: no such file or directory, open './utils/config.json'
What can I do to get it work? Any other suggestions or tips? Would be awesome!
-
@dogs what you have should work. Are you sure you're using configpath inside the readfilesync?
-
@dogs no please don't open an issue for this. This is certainly not a problem with NodeBB. In fact this is a basic Node.js programming issue
Please share the full source of library.js
The reason I know there's something wrong with your code is that the error mentions
./utils/config.json
, but if the correct path with__dirname
was passed in, it would be something likenode_modules/nodebb-plugin-blah/utils/config.json
-
@pitaj Many thanks for your effort
Okay so I just
npm link
'ed my plugin again so I thought some file will be updated. But they weren't.Here is my full source code of
libary.js
:'use strict'; /* NodeBB Basic Plugin Libraries */ const controllers = require('./lib/controllers'); const plugin = {}; /* Third Party Libraries */ const Discord = require("discord.js"); const fs = require("fs"); // Nodebb Discord Bot const config = JSON.parse(fs.readFileSync("./utils/config.json", "utf-8")); var client = new Discord.Client(); let debug = true; plugin.init = function (params, callback, client) { myDebug("nodebb-discord-bot-started"); callback(); }; function myDebug(msg){ if(debug){ console.log(msg); } } module.exports = plugin;
2021-01-12T10:46:19.318Z [4567/4689] - error: Error: ENOENT: no such file or directory, open './utils/config.json' at Object.openSync (fs.js:462:3) at Object.readFileSync (fs.js:364:35) at Object.<anonymous> (/home/ubuntu/nodebb-linked-modules/nodebb-plugin-makesmart-discord-bot/library.js:15:30) at Module._compile (internal/modules/cjs/loader.js:999:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10) at Module.load (internal/modules/cjs/loader.js:863:32) at Function.Module._load (internal/modules/cjs/loader.js:708:14) at Module.require (internal/modules/cjs/loader.js:887:19) at require (internal/modules/cjs/helpers.js:74:18) at Object.Plugins.requireLibrary (/home/ubuntu/nodebb/src/plugins/index.js:70:39)
I tried it with
path
again:// Nodebb Discord Bot var configpath = path.join(__dirname, 'utils', 'config.json'); const config = JSON.parse(fs.readFileSync(configpath, "utf-8")); var client = new Discord.Client();
an suddenly ... it worked! o.O
2021-01-12T10:51:15.711Z [4567/4765] - info: [api] Adding 2 route(s) to `api/v3/plugins` 2021-01-12T10:51:15.889Z [4567/4765] - info: Routes added 2021-01-12T10:51:15.933Z [4567/4765] - info: NodeBB Ready 2021-01-12T10:51:15.943Z [4567/4765] - info: Enabling 'trust proxy' 2021-01-12T10:51:15.972Z [4567/4765] - info: NodeBB is now listening on: 0.0.0.0:4567
I think it was really because I ran npm link again. Funny.* I'm sorry. Most of the time, the problem is in front of the computer.
But still a strange behavior in my opinion. Well ... Good to know for the future. @PitaJ as mentioned thank you for you effort.
For any others having the same issue:
- Read the Stackoverflow Solution posted by @PitaJ right here
- If it still not work use
npm link
in./nodebb
again to refresh something in the plugin folder ...I dont know tbh ...