什么是N-API
N-API为开发者提供了一套C/C++ API用于开发Node.js的Native扩展模块。从Node.js 8.0.0开始,N-API以实验性特性作为Node.js本身的一部分被引入,并且从Node.js 10.0.0开始正式全面支持N-API。
Hello N-API
本文将使用一个简单的模块作为示例介绍N-API。我们将编写一个hello
模块,其中包括一个返回Hello N-API!
字符串的方法greeting
。其实现的功能相当于下列Javascript代码:
const greeting = () => {
return 'Hello N-API!';
}
module.exports = {
greeting,
};
greeting方法定义
首先,我们需要定义greeting
方法,并返回值为Hello N-API!
的字符串。为了使用N-API提供的接口及类型定义,我们需要引入node_api.h
头文件。使用N-API定义的方法需要满足napi_callback
类型,其定义为:
typedef napi_value (*napi_callback)(napi_env env, napi_callback_info info);
napi_callback
是使用N-API开发的Native函数的函数指针类型,其接受类型分别为napi_env
以及napi_callback_info
的两个参数,并返回类型为napi_value
的值。greeting
方法中涉及到的几个类型定义及其用途如下:
napi_value
类型是一个用于表示Javascript值的指针napi_env
类型用于存储Javascript虚拟机的上下文napi_callback_info
类型用于调用回调函数时,传递调用时的上下文信息
我们定义的greeting
方法如下:
napi_value greeting(napi_env env, napi_callback_info info) {
napi_status status;
napi_value word;
char *str = "Hello N-API!";
status = napi_create_string_utf8(env, str, strlen