Node.JS Thrift 服务器示例给出 "Cannot read property 'tls' of undefined"

Node.JS Thrift server example gives "Cannot read property 'tls' of undefined"

我正在尝试关注 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. Server部分下的服务器端代码放入NodeServer.js
  7. 在终端中,运行 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

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

原回答

我通过更改 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, {...}, {})
                                                    ^

解决问题