Не работает fs.readFileSync

183
02 марта 2019, 17:40

Есть две разные ситуации с одним и тем же кодом

var fs = require("fs");
var content = JSON.parse(fs.readFileSync('./config.json', "utf8"));

Без проблем запускается на одном компьютере.

А на втором выкидывает ошибку:

Error: ENOENT: no such file or directory, open './config.json' at Object.openSync (fs.js:436:3) at Object.readFileSync (fs.js:341:35) at Object. (—) at Module._compile (internal/modules/cjs/loader.js:688:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10) at Module.load (internal/modules/cjs/loader.js:598:32) at tryModuleLoad (internal/modules/cjs/loader.js:537:12) at Function.Module._load (internal/modules/cjs/loader.js:529:3) at Function.Module.runMain (internal/modules/cjs/loader.js:741:12) at startup (internal/bootstrap/node.js:285:19)

Answer 1

Данная проблема решилась строками:

const config = path.join(__dirname, '/config.json');
const content = JSON.parse(fs.readFileSync(config, "utf8"));

Дело в точке, т.к. на разных системах это воспринимается по разному. В Node.js __dirname всегда находит каталог, в котором находится текущий исполняемый скрипт. Так что, если вы ввели __dirname в /d1/d2/myscript.js, то значение будет /d1/d2. В отличие . от этого, вы получаете каталог, с которого вы запускали node команду в окне терминала (т.е. в вашем рабочем каталоге). Исключение при использовании . с require(). Путь внутри require всегда относится к файлу, содержащему вызов require.

Помогла эта статья: Но сразу после запуска следующая ошибка:

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line

at Object.createSecureContext (_tls_common.js:113:17)
at Server (_tls_wrap.js:868:27)
at new Server (https.js:62:14)
at Object.createServer (https.js:84:10)
at Object.<anonymous> (---)
at Module._compile (internal/modules/cjs/loader.js:688:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
at Module.load (internal/modules/cjs/loader.js:598:32)
at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
at Function.Module._load (internal/modules/cjs/loader.js:529:3)

Однако, если указывать подобный образом, то всё работает и программа успешно запускается.

const conf = https.createServer({
  cert: /.../.../certificat.txt,
  key: /../../keys.txt
});
READ ALSO
Крестики нолики на JavaScript

Крестики нолики на JavaScript

Есть такой код игры крестики нолики, но здесь каждый выбор клетки делаю я сам, а каким образом можно сделать, чтобы против меня компьютер играл?...

159
Переход на другую страницу по нажатию на блок

Переход на другую страницу по нажатию на блок

Как при нажатии по HTML-блоку перейти на другую страницу? Не используя тег <a>

283