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

use*_*759 2 thrift node.js

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

以下是一些背景信息:

操作系统:Windows 7

Node.JS版本:v0.10.34

Thrift编译器版本:0.9.2

这是我的步骤:

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

    {
      "name": "thrifttest",
      "version": "0.0.0",
      "private": true,
      "scripts": {
        "start": "node ./bin/www"
      },
      "dependencies": {
        "thrift": "~0.9.2"
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. Server部分下的服务器端代码放入NodeServer.js
  6. 在终端中,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
Run Code Online (Sandbox Code Playgroud)

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

use*_*759 7

原始答案

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

if (options.tls) {
    return tls.createServer(options.tls, serverImpl);
  } else {
    return net.createServer(serverImpl);
  }
Run Code Online (Sandbox Code Playgroud)

return net.createServer(serverImpl);
Run Code Online (Sandbox Code Playgroud)

那就是删除if声明.

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

更新的答案 创建服务器时,

var server = thrift.createServer(Calculator, {...})
Run Code Online (Sandbox Code Playgroud)

createServer签名想到第三个参数options,传递一个空对象createServer

var server = thrift.createServer(Calculator, {...}, {})
                                                    ^
Run Code Online (Sandbox Code Playgroud)

解决了这个问题