代码之家  ›  专栏  ›  技术社区  ›  sourceplaze

函数不能按预期工作

  •  -1
  • sourceplaze  · 技术社区  · 6 年前

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

    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)投掷(ex); W20180606-15:08:29.566(4)?(标准普尔)^W20180606-15:08:29.566(4)?

    (标准)W20180606-15:08:29.567(4)?(stderr)错误:enoent:没有

    文件或目录,打开“../certificates/key.pem”

    W20180606-15:08:29.567(4)?(stderr)位于object.fs.opensync (法新社:646:18)W20180606-15:08:29.567(4)?(标准)在

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

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

    (stderr)在需要时(packages/modules runtime.js:238:16)

    W20180606-15:08:29.569(4)?(标准)在

    /用户/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)

    以下是我的文件结构

    file structure

    我正在使用 fs.readFileSync('../certificates/key.pem', 'utf8') 里面 main.js

    我试过解决办法 posted here 但这并没有解决我的问题。

    我在这里做错什么了?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Behrouz Riahi    6 年前
    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
  •  0
  •   Estus Flask    6 年前

    如上所述 fs documentation ,

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

    错误意味着当前工作目录不是main.js所在的目录, chat/server .

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

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