C++编写nodejs模块
时间: 2023-03-20 09:00:53 浏览: 86
要在 Node.js 中编写 C 模块,需要使用 Node.js 提供的 C++ API。下面是一个简单的示例,展示了如何编写一个 C++ 模块并将其导出到 Node.js 中:
首先,创建一个名为 `example.cpp` 的文件,其中包含以下代码:
```cpp
#include <node.h>
using namespace v8;
// 定义一个函数,接受两个参数并返回它们的和
void Add(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
if (args.Length() < 2) {
isolate->ThrowException(
Exception::TypeError(String::NewFromUtf8(isolate, "参数数量不正确")));
return;
}
if (!args[0]->IsNumber() || !args[1]->IsNumber()) {
isolate->ThrowException(
Exception::TypeError(String::NewFromUtf8(isolate, "参数必须是数字")));
return;
}
double value =
args[0].As<Number>()->Value() + args[1].As<Number>()->Value();
Local<Number> num = Number::New(isolate, value);
args.GetReturnValue().Set(num);
}
// 导出 Add 函数
void Init(Local<Object> exports) {
NODE_SET_METHOD(exports, "add", Add);
}
// 声明初始化函数
NODE_MODULE(NODE_GYP_MODULE_NAME, Init)
```
这个文件定义了一个名为 `Add` 的函数,该函数接受两个参数,并返回它们的和。该文件还定义了一个名为 `Init` 的初始化函数,该函数将 `Add` 导出到 Node.js 中。最后,该文件使用 `NODE_MODULE` 宏将 `Init` 与模块名关联起来。
接下来,使用 `node-gyp` 工具将 C++ 模块编译为 Node.js 可以加载的二进制文件。创建一个名为 `binding.gyp` 的文件,其中包含以下内容:
```json
{
"targets": [
{
"target_name": "example",
"sources": [ "example.cpp" ]
}
]
}
```
该文件指定了编译目标 `example`,并将 `example.cpp` 文件作为源文件。使用以下命令将模块编译为 Node.js 可以加载的二进制文件:
```
$ node-gyp configure build
```
最后,在 Node.js 中加载模块并使用它。创建一个名为 `app.js` 的文件,其中包含以下内容:
```js
const addon = require('./build/Release/example.node');
console.log('1 + 2 =', addon.add(1, 2));
```
该文件加载 C++ 模块,并使用 `addon.add` 调用 `Add` 函数。运行以下命令运行应用程序:
```
$ node app.js
```
输出应该显示 `1 + 2 = 3`。