前几天我们了解了如何通过n api返回nodejs的对象给nodejs,今天我们来介绍一下如何接收nodejs传过来的数据。
例如,当我运行nodejs代码:
let ts = require('./test.node') ts.ShowVersion('hello world')
我们送入了一个参数'hello world',如何让n api部分接收到呢,这里就需要一个函数名为napi_get_cb_info,它用于接收由nodejs送下来的参数。
函数原型如下:
napi_status napi_get_cb_info(napi_env env, // C执行函数的env,直接送过来即可 napi_callback_info cbinfo, // C执行函数的info,直接送过来即可 size_t* argc, // 这个参数即是输入参数,又是输出参数,需要对他初始化用于告诉函数有几个参数 napi_value* argv, // 这个是用于读取nodejs送下来的参数的 napi_value* thisArg, // 送函数上下文,这个参数可以为null void** data) // 接收数据指针,这个我也没用过,通常直接设置为null
上面的例子参数很简单,可以将参数直接使用napi_get_value_string_utf8解析,解析代码如下:
napi_value ShowVersion(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value argv[1]; napi_get_cb_info (env, info, &argc, argv, NULL, NULL); char buff[32]; napi_get_value_string_utf8(env, argv[0], buff, sizeof(buff), NULL); printf("buff: %s\n", buff); return NULL; }
那么,如果有两个参数呢?并且类型不同,例如:
let ts = require('./test.node') ts.ShowVersion('hello world', 6)
这个例子中,输入了两个参数,一个是字符串类型,另一个是数字类型。
napi_value ShowVersion(napi_env env, napi_callback_info info) { size_t argc = 2; napi_value argv[2]; napi_get_cb_info (env, info, &argc, argv, NULL, NULL); char buff[32]; napi_get_value_string_utf8(env, argv[0], buff, sizeof(buff), NULL); printf("buff: %s\n", buff); int32_t num; napi_get_value_int32(env, argv[1], &num); printf("num: %d\n", num); return NULL; }
其执行效果如下:
F:\BaiduYunDownload\nodetest>node test.js
buff: hello world
num: 6
文章作者:沃航科技