【问题标题】:fs.readFileSync() function doesn't work as expectedfs.readFileSync() 函数无法按预期工作
【发布时间】:2018-11-16 01:28:56
【问题描述】:

以下代码无法按预期工作:

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 (chat/server/main.js:15:11)

W20180606-15:08:29.568(4)? (STDERR) 在文件评估中

(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) 在

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

W20180606-15:08:29.569(4)? (STDERR) 在 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 的解决方案,但它没有为我解决。

我在这里做错了什么?

【问题讨论】:

    标签: node.js meteor


    【解决方案1】:
    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 简单回答here

    希望它能为你解决问题

    【讨论】:

      【解决方案2】:

      fs documentation中所述,

      字符串形式的路径被解释为标识绝对或相对文件名的 UTF-8 字符序列。相对路径将相对于 process.cwd() 指定的当前工作目录进行解析。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多