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 简单回答。
希望能为您解决
所述
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')
以下代码未按预期运行:
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 简单回答
希望能为您解决
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')