Функция fs.readFileSync () не работает должным образом - PullRequest
0 голосов
/ 06 июня 2018

Следующий код не работает должным образом:

var fs = require('fs');
var PeerServer = require('peer').PeerServer;

var server = PeerServer({
port: 9000,
path: '/peerjs',
ssl: {
    key: fs.readFileSync('../certificates/key.pem', 'utf8'),
    cert: fs.readFileSync('../certificates/cert.pem', 'utf8')
}
});

Возвращает следующую ошибку:

/ Users / mzn / .meteor / packages / meteor-tool/.1.6.0_1.i59qpv.ylxp8++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:280 W20180606-15: 08: 29,566 (4)?(STDERR) бросок (бывший);W20180606-15: 08: 29,566 (4)?(STDERR) ^ W20180606-15: 08: 29.566 (4)?

(STDERR) W20180606-15: 08: 29.567 (4)?(STDERR) Ошибка: ENOENT: нет такого

файла или каталога, откройте '../certificates/key.pem'

W20180606-15: 08: 29.567 (4)?(STDERR) на Object.fs.openSync (fs.js: 646: 18) W20180606-15: 08: 29.567 (4)?(STDERR) в

Object.fs.readFileSync (fs.js: 551: 33) W20180606-15: 08: 29.568 (4)?

(STDERR) в main.js (чат/server/main.js:15:11)

W20180606-15: 08: 29.568 (4)?(STDERR) в fileEvaluate

(packages / modules-runtime.js: 343: 9) W20180606-15: 08: 29.568 (4)?

(STDERR) по требованию (пакеты / модули)-runtime.js: 238: 16)

W20180606-15: 08: 29,569 (4)?(STDERR) в

/ Пользователи / mzn / Рабочий стол / Все / чат / .meteor / локальный / сборка / программы / сервер / приложение / app.js: 537: 1

W20180606-15: 08: 29,569 (4)?(STDERR) на infos.forEach.info

(/ Пользователи / mzn / Рабочий стол / Все / chat / .meteor / local / build / Programs / Server / boot.js: 414: 13)

Ниже приведена структура моих файлов

file structure

Я использую fs.readFileSync('../certificates/key.pem', 'utf8') внутри main.js

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

Что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Как указано в fs документации ,

Пути в форме строки интерпретируются как последовательности символов UTF-8, идентифицирующие абсолютное или относительное имя файла.Относительные пути будут разрешены относительно текущего рабочего каталога, как указано в process.cwd ().

Ошибка означает, что текущий рабочий каталог не является каталогом, в котором находится main.js, chat/server.

Если пути к этим файлам должны быть разрешены из текущего пути модуля, это должно быть:

fs.readFileSync(path.join(__dirname, '../certificates/key.pem'), 'utf8')
0 голосов
/ 06 июня 2018
if (Meteor.isServer) {
    Meteor.startup(function () {
    // code to run on server at startup
    var base = process.env.PWD;
    var fs = Npm.require('fs');
    var PeerServer = require('peer').PeerServer;


    var server = PeerServer({
        port: 9000,
        path: '/peerjs',
        ssl: {
            key: fs.readFileSync(base + '/chat/certificates/key.pem', 'utf8'),
            cert: fs.readFileSync(base + '/chat/certificates/cert.pem', 'utf8')
        }
    });
});
}

Кредит @Kevin Простой ответ здесь .

Надеюсь, это решит это за вас

...