Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.JS Thrift服务器示例给出;无法读取属性';tls&x27;“未定义”的定义;_Node.js_Thrift - Fatal编程技术网

Node.JS Thrift服务器示例给出;无法读取属性';tls&x27;“未定义”的定义;

Node.JS Thrift服务器示例给出;无法读取属性';tls&x27;“未定义”的定义;,node.js,thrift,Node.js,Thrift,我正试图遵循Thrift的,但无法读取未定义的属性“tls” 以下是一些背景信息: 操作系统:Windows7 Node.JS版本:v0.10.34 节俭编译器版本:0.9.2 以下是我的步骤: 获取thrift v0.9.2窗口 将tutorial.thrift和shared.thrift(来自tutorial)复制到空的控制器ProjRoot 使用从step1thrift.0.9.2-r--gen js:node tutorial.thrift和shared.thrift获得的exe生成.j

我正试图遵循Thrift的,但无法读取未定义的属性“tls”

以下是一些背景信息:

操作系统:Windows7

Node.JS版本:v0.10.34

节俭编译器版本:0.9.2

以下是我的步骤:

  • 获取thrift v0.9.2窗口
  • 将tutorial.thrift和shared.thrift(来自tutorial)复制到空的控制器
    ProjRoot
  • 使用从step1
    thrift.0.9.2-r--gen js:node tutorial.thrift
    shared.thrift
    获得的exe生成.js文件
  • 使用以下内容创建
    package.json

    {
      "name": "thrifttest",
      "version": "0.0.0",
      "private": true,
      "scripts": {
        "start": "node ./bin/www"
      },
      "dependencies": {
        "thrift": "~0.9.2"
      }
    }
    
  • server部分下的服务器端代码放入NodeServer.js
  • 在终端中,运行
    npm install
    然后
    node NodeServer.js
  • 我得到了以下错误:

    ...\ProjRoot\node_modules\thrift\lib\thrift\server.js:89
      if (options.tls) {
                 ^
    TypeError: Cannot read property 'tls' of undefined
        at Object.exports.createMultiplexServer (...\ProjRoot\node_modules\thrift\lib\thrift\s
    erver.js:89:14)
        at Object.exports.createServer (...\ProjRoot\node_modules\thrift\lib\thrift\server.js:106:18)
        at Object.<anonymous> (...\ProjRoot\NodeServer.js:8:21)
        at Module._compile (module.js:456:26)
        at Object.Module._extensions..js (module.js:474:10)
        at Module.load (module.js:356:32)
        at Function.Module._load (module.js:312:12)
        at Function.Module.runMain (module.js:497:10)
        at startup (node.js:119:16)
        at node.js:929:3
    
    …\ProjRoot\node\u modules\thrift\lib\thrift\server.js:89
    if(options.tls){
    ^
    TypeError:无法读取未定义的属性“tls”
    在Object.exports.createMultiplexServer(…\ProjRoot\node\u modules\thrift\lib\thrift\s
    (服务器:89:14)
    在Object.exports.createServer(…\ProjRoot\node\u modules\thrift\lib\thrift\server.js:106:18)
    在对象上。(…\ProjRoot\NodeServer.js:8:21)
    在模块处编译(Module.js:456:26)
    在Object.Module.\u extensions..js(Module.js:474:10)
    在Module.load(Module.js:356:32)
    在Function.Module.\u加载(Module.js:312:12)
    位于Function.Module.runMain(Module.js:497:10)
    启动时(node.js:119:16)
    在node.js:929:3
    

    这是一个bug?还是我忽略了什么?

    原始答案

    我通过将server.js上的代码从以下位置更改为临时解决此问题:

    if (options.tls) {
        return tls.createServer(options.tls, serverImpl);
      } else {
        return net.createServer(serverImpl);
      }
    

    这就是删除
    if
    语句

    我当然期待一个真正解决这个问题的解决方案

    更新的答案 创建服务器时

    var server = thrift.createServer(Calculator, {...})
    
    createServer
    签名需要第三个参数
    options
    ,将空对象传递给createServer

    var server = thrift.createServer(Calculator, {...}, {})
                                                        ^
    

    解决了两个thrift文件的问题

    链接:,在thrift用户邮件列表上讨论此问题可能是个好主意。
    var server = thrift.createServer(Calculator, {...}, {})
                                                        ^