Electron中调用Node-API编译的C函数报错:server is not a function
问题:Electron中Node-API调用C函数报错TypeError: server is not a function
错误信息
TypeError: server is not a function at Object.<anonymous> (C:\Users\cantr\Desktop\Stage ingénieur KOMILFO SPORT\Sail Vision\Test backend\index.js:3:13) at Module._compile (node:internal/modules/cjs/loader:1159:14) at Module._extensions..js (node:internal/modules/cjs/loader:1213:10) at Module.load (node:internal/modules/cjs/loader:1037:32) at Module._load (node:internal/modules/cjs/loader:878:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:23:47 Node.js v18.12.0
相关代码
index.js
const server = require("./build/Release/server"); console.log(server(12))
server.c
#include<node_api.h> napi_value Server(napi_env env, napi_callback_info info){ size_t argc=1; napi_value args[1]; int64_t upper_limit; int64_t largest_prime; napi_value output; napi_get_cb_info(env,info,&argc,args,NULL,NULL); napi_get_value_int64(env,args[0],&upper_limit); largest_prime=upper_limit; napi_create_double(env,largest_prime,&output); return output; } napi_value init(napi_env env, napi_value exports) { napi_value server; napi_create_function(env,NULL,0,Server,NULL,&server); napi_set_named_property(env, exports, "Server",server); return exports; } NAPI_MODULE(NODE_GYP_MODULE_NAME,init);
binding.gyp
{ "variables": { "openssl_fips" : "0" }, "targets":[ { "target_name":"server", "sources":[ "server.c" ] } ] }
解决方案
原因分析
你的C代码中,init函数是把Server函数作为名为"Server"的属性挂载到exports对象上的,但在index.js里你直接把整个模块导出对象当作函数调用,导致报错。
解决方法二选一:
修改index.js,调用正确的属性
把调用语句改成访问模块的Server属性(注意首字母大写):const server = require("./build/Release/server"); console.log(server.Server(12));修改server.c,直接把exports设为函数
调整init函数,直接将创建的函数赋值给exports,而不是添加属性:napi_value init(napi_env env, napi_value exports) { napi_create_function(env, NULL, 0, Server, NULL, &exports); return exports; }这样
index.js的原有代码无需修改即可正常运行。
额外排查步骤
如果修改后仍报错,执行node-gyp rebuild重新编译C模块,确保build目录下的产物是最新的。
内容的提问来源于stack exchange,提问作者Feyto
相关产品推荐
相关产品推荐

