Node.JS Thrift服务器示例给出了#34;无法读取属性' tls'未定义"

时间:2015-01-07 09:05:55

标签: node.js thrift

我正在尝试关注Thrift的Node.JS tutorial,但得到了Cannot read property 'tls' of undefined

以下是一些背景信息:

操作系统:Windows 7

Node.JS版本:v0.10.34

Thrift编译器版本:0.9.2

以下是我的步骤:

  1. 获取节俭v0.9.2 Windows here
  2. 将tutorial.thrift和shared.thrift(从教程中)复制到空导演ProjRoot
  3. 使用从步骤1 thrift.0.9.2 -r --gen js:node tutorial.thriftshared.thrift
  4. 获得的exe生成.js文件
  5. 使用以下内容创建package.json

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

    ...\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
    

    这是一个错误吗?还是我忽略了什么?

1 个答案:

答案 0 :(得分:7)

原始回答

我通过更改server.js中的代码来暂时解决此问题:

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

return net.createServer(serverImpl);

即删除if语句。

我非常期待真正解决问题的解决方案

更新回答 创建服务器时,

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

createServer签名期望第三个参数options,将空对象传递给createServer

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

解决问题