0

尝试运行我的 Node 本机扩展时出现以下错误(它构建时没有错误)。我想知道为什么会出现此错误,因为据我所知,我所做的一切都是正确的。

./NodeTest/nodeTest.js:7
tester.Startup();
       ^

TypeError: tester.Startup is not a function
    at Object.<anonymous> (./NodeTest/nodeTest.js:7:8)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:383:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:496:3

这是“nodeTest.cpp”文件:

#include <nan.h>

NAN_METHOD(Startup)
{
    auto message = Nan::New("Native Startup() method called.").ToLocalChecked();

    info.GetReturnValue().Set(message);
}

NAN_MODULE_INIT(Initialize)
{
    NAN_EXPORT(target, Startup);
}

NODE_MODULE(nodeTest, Initialize);

这是“nodeTest.js”文件:

var tester = require('./nodeTest');
tester.Startup();

这是“package.json”文件:

{
  "name": "nodeTest",
  "version": "0.0.1",
  "scripts": {
    "install": "node-gyp rebuild",
    "compile": "node-gyp rebuild",
    "test": "node nodeTest.js"
  },
  "dependencies": {
    "nan": "^2.8.0"
  },
  "gypfile": true,
  "author": "BT",
  "license": "ISC",
  "main": "nodeTest.js",
  "keywords": [],
  "description": "NodeTest"
}

这是“bindings.gyp”文件:

{
  'targets': [{
    'target_name': "nodeTest",

    'include_dirs': [
      "<!(node -e \"require('nan')\")",
      "./src"
    ],

    'cflags': [
      "-Wall", "-std=c++11", "-fPIC"
    ],

    'sources': [
      "./src/nodeTest.cpp"
    ]
  },  # nodeTest target

  {
      "target_name": "copy_binary",
      "type": "none",
      "dependencies" : [ "nodeTest" ],
      "copies": [{
        'destination': '<(module_root_dir)',
        'files': ['<(module_root_dir)/build/Release/nodeTest.node']
      }]
  }  # copy target

  ] # 'targets'
}
4

1 回答 1

2

问题在于文件的命名。您的程序的入口点nodeTest.js包含:

var tester = require('./nodeTest');
tester.Startup();

然后你有nodeTest.cpp哪些将被编译成nodeTest.node. 但是通过使用require('./nodeTest')而不是要求nodeTest.node您尝试执行的操作,您要求的nodeTest.js.js默认扩展要求将尝试。如果找不到.js文件,它将尝试.json文件。之后,它将尝试查找二进制.node文件。

nodeTest.js要求自己也是如此。为了解决您的问题,请nodeTest.jsindex.js使用require.

var tester = require('./nodeTest.node');
tester.Startup();
于 2018-04-18T02:41:17.940 回答