fs.readFileSync() 函数未按预期工作

fs.readFileSync() function doesn't work as expected

以下代码未按预期运行:

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')
}
});

它returns出现以下错误:

/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) throw(ex); W20180606-15:08:29.566(4)? (STDERR) ^ W20180606-15:08:29.566(4)?

(STDERR) W20180606-15:08:29.567(4)? (STDERR) Error: ENOENT: no such

file or directory, open '../certificates/key.pem'

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

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

(STDERR) at main.js (chat/server/main.js:15:11)

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

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

(STDERR) at require (packages/modules-runtime.js:238:16)

W20180606-15:08:29.569(4)? (STDERR) at

/Users/mzn/Desktop/All/chat/.meteor/local/build/programs/server/app/app.js:537:1

W20180606-15:08:29.569(4)? (STDERR) at infos.forEach.info

(/Users/mzn/Desktop/All/chat/.meteor/local/build/programs/server/boot.js:414:13)

下面是我的文件结构

我在 main.js

中使用 fs.readFileSync('../certificates/key.pem', 'utf8')

我尝试了 posted here 的解决方案,但没有为我解决。

我做错了什么?

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 简单回答

希望能为您解决

fs documentation

所述

String form paths are interpreted as UTF-8 character sequences identifying the absolute or relative filename. Relative paths will be resolved relative to the current working directory as specified by process.cwd().

该错误表示当前工作目录不是 main.js 所在的目录,chat/server

如果这些文件的路径应该从当前模块路径解析,它应该是:

fs.readFileSync(path.join(__dirname, '../certificates/key.pem'), 'utf8')