node-addon-api: errors after upgrade to node 8

All was working good on node 7.

I’ve got 2 errors after upgrading from node 7 to node 8.

How can I fix this?

Thanks

Using Python 2.7

I get different errors (in Docker container or locally)

In Docker container:

make: Entering directory '/app/build'
  CXX(target) Release/obj.target/node-api/node_modules/node-addon-api/src/node_api.o
../node_modules/node-addon-api/src/node_api.cc: In function ‘napi_status napi_async_init(napi_env, napi_value, napi_value, napi_async_context__**)’:
../node_modules/node-addon-api/src/node_api.cc:2806:3: error: ‘async_context’ is not a member of ‘node’
   node::async_context* async_context = new node::async_context();
   ^
../node_modules/node-addon-api/src/node_api.cc:2806:24: error: ‘async_context’ was not declared in this scope
   node::async_context* async_context = new node::async_context();
                        ^
../node_modules/node-addon-api/src/node_api.cc:2806:44: error: expected type-specifier
   node::async_context* async_context = new node::async_context();
                                            ^
../node_modules/node-addon-api/src/node_api.cc:2808:78: error: cannot convert ‘v8::Local<v8::String>’ to ‘const char*’ for argument ‘3’ to ‘node::async_uid node::EmitAsyncInit(v8::Isolate*, v8::Local<v8::Object>, const char*, node::async_uid)’
   *async_context = node::EmitAsyncInit(isolate, v8_resource, v8_resource_name);
                                                                              ^
../node_modules/node-addon-api/src/node_api.cc: In function ‘napi_status napi_async_destroy(napi_env, napi_async_context)’:
../node_modules/node-addon-api/src/node_api.cc:2820:3: error: ‘async_context’ is not a member of ‘node’
   node::async_context* node_async_context =
   ^
../node_modules/node-addon-api/src/node_api.cc:2820:24: error: ‘node_async_context’ was not declared in this scope
   node::async_context* node_async_context =
                        ^
../node_modules/node-addon-api/src/node_api.cc:2821:30: error: ‘async_context’ in namespace ‘node’ does not name a type
       reinterpret_cast<node::async_context*>(async_context);
                              ^
../node_modules/node-addon-api/src/node_api.cc:2821:43: error: expected ‘>’ before ‘*’ token
       reinterpret_cast<node::async_context*>(async_context);
                                           ^
../node_modules/node-addon-api/src/node_api.cc:2821:43: error: expected ‘(’ before ‘*’ token
../node_modules/node-addon-api/src/node_api.cc:2821:44: error: expected primary-expression before ‘>’ token
       reinterpret_cast<node::async_context*>(async_context);
                                            ^
../node_modules/node-addon-api/src/node_api.cc:2821:60: error: expected ‘)’ before ‘;’ token
       reinterpret_cast<node::async_context*>(async_context);
                                                            ^
../node_modules/node-addon-api/src/node_api.cc: In function ‘napi_status napi_make_callback(napi_env, napi_async_context, napi_value, napi_value, size_t, napi_value__* const*, napi_value__**)’:
../node_modules/node-addon-api/src/node_api.cc:2849:3: error: ‘async_context’ is not a member of ‘node’
   node::async_context* node_async_context =
   ^
../node_modules/node-addon-api/src/node_api.cc:2849:24: error: ‘node_async_context’ was not declared in this scope
   node::async_context* node_async_context =
                        ^
../node_modules/node-addon-api/src/node_api.cc:2850:28: error: ‘async_context’ in namespace ‘node’ does not name a type
     reinterpret_cast<node::async_context*>(async_context);
                            ^
../node_modules/node-addon-api/src/node_api.cc:2850:41: error: expected ‘>’ before ‘*’ token
     reinterpret_cast<node::async_context*>(async_context);
                                         ^
../node_modules/node-addon-api/src/node_api.cc:2850:41: error: expected ‘(’ before ‘*’ token
../node_modules/node-addon-api/src/node_api.cc:2850:42: error: expected primary-expression before ‘>’ token
     reinterpret_cast<node::async_context*>(async_context);
                                          ^
../node_modules/node-addon-api/src/node_api.cc:2850:58: error: expected ‘)’ before ‘;’ token
     reinterpret_cast<node::async_context*>(async_context);
                                                          ^
../node_modules/node-addon-api/src/node_api.cc:2852:18: error: ‘async_context’ in namespace ‘node’ does not name a type
     static node::async_context empty_context = { 0, 0 };
                  ^
../node_modules/node-addon-api/src/node_api.cc:2853:27: error: ‘empty_context’ was not declared in this scope
     node_async_context = &empty_context;
                           ^
../node_modules/node-addon-api/src/node_api.cc: In constructor ‘uvimpl::Work::Work(napi_env, v8::Local<v8::Object>, v8::Local<v8::String>, napi_async_execute_callback, napi_async_complete_callback, void*)’:
../node_modules/node-addon-api/src/node_api.cc:3338:23: error: no matching function for call to ‘node::AsyncResource::AsyncResource(v8::Isolate*&, v8::Local<v8::Object>&, v8::Local<v8::String>&)’
     _complete(complete) {
                       ^
In file included from /data/var/home/gonano/.node-gyp/8.0.0/include/node/node_buffer.h:25:0,
                 from ../node_modules/node-addon-api/src/node_api.cc:11:
/data/var/home/gonano/.node-gyp/8.0.0/include/node/node.h:591:5: note: candidate: node::AsyncResource::AsyncResource(v8::Isolate*, v8::Local<v8::Object>, const char*, node::async_uid)
     AsyncResource(v8::Isolate* isolate,
     ^
/data/var/home/gonano/.node-gyp/8.0.0/include/node/node.h:591:5: note:   no known conversion for argument 3 from ‘v8::Local<v8::String>’ to ‘const char*’
/data/var/home/gonano/.node-gyp/8.0.0/include/node/node.h:589:7: note: candidate: node::AsyncResource::AsyncResource(const node::AsyncResource&)
 class AsyncResource {
       ^
/data/var/home/gonano/.node-gyp/8.0.0/include/node/node.h:589:7: note:   candidate expects 1 argument, 3 provided
../node_modules/node-addon-api/src/node_api.cc: In static member function ‘static void uvimpl::Work::CompleteCallback(uv_work_t*, int)’:
../node_modules/node-addon-api/src/node_api.cc:3374:7: error: ‘CallbackScope’ was not declared in this scope
       CallbackScope callback_scope(work);
       ^
node_modules/node-addon-api/src/node-api.target.mk:94: recipe for target 'Release/obj.target/node-api/node_modules/node-addon-api/src/node_api.o' failed
make: *** [Release/obj.target/node-api/node_modules/node-addon-api/src/node_api.o] Error 1
make: Leaving directory '/app/build'

Locally:

/project/node_modules/node-addon-api/napi.h:1072:12: error: unknown type name 'NAPI_NO_RETURN'
    static NAPI_NO_RETURN void Fatal(const char* location, const char* message);
           ^
/project/node_modules/node-addon-api/napi.h:1072:27: error: expected member name or ';' after
      declaration specifiers
    static NAPI_NO_RETURN void Fatal(const char* location, const char* message);
    ~~~~~~~~~~~~~~~~~~~~~ ^
In file included from ../binding.cpp:4:
In file included from /project/node_modules/node-addon-api/napi.h:1449:
/project/node_modules/node-addon-api/napi-inl.h:421:24: error: use of undeclared identifier
      'napi_create_double'
  napi_status status = napi_create_double(env, val, &value);
                       ^
/project/node_modules/node-addon-api/napi-inl.h:1427:3: error: no member named 'Fatal' in
      'Napi::Error'
  NAPI_FATAL_IF_FAILED(status, "Error::New", "napi_get_last_error_info");
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi-inl.h:47:14: note: expanded from macro
      'NAPI_FATAL_IF_FAILED'
      Error::Fatal((location), (message));               \
      ~~~~~~~^
/project/node_modules/node-addon-api/napi-inl.h:1432:7: error: no member named 'Fatal' in
      'Napi::Error'
      NAPI_FATAL_IF_FAILED(status, "Error::New", "napi_get_and_clear_last_exception");
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi-inl.h:47:14: note: expanded from macro
      'NAPI_FATAL_IF_FAILED'
      Error::Fatal((location), (message));               \
      ~~~~~~~^
/project/node_modules/node-addon-api/napi-inl.h:1440:7: error: no member named 'Fatal' in
      'Napi::Error'
      NAPI_FATAL_IF_FAILED(status, "Error::New", "napi_is_exception_pending");
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi-inl.h:47:14: note: expanded from macro
      'NAPI_FATAL_IF_FAILED'
      Error::Fatal((location), (message));               \
      ~~~~~~~^
/project/node_modules/node-addon-api/napi-inl.h:1444:9: error: no member named 'Fatal' in
      'Napi::Error'
        NAPI_FATAL_IF_FAILED(status, "Error::New", "napi_get_and_clear_last_exception");
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi-inl.h:47:14: note: expanded from macro
      'NAPI_FATAL_IF_FAILED'
      Error::Fatal((location), (message));               \
      ~~~~~~~^
/project/node_modules/node-addon-api/napi-inl.h:1453:7: error: no member named 'Fatal' in
      'Napi::Error'
      NAPI_FATAL_IF_FAILED(status, "Error::New", "napi_create_string_utf8");
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi-inl.h:47:14: note: expanded from macro
      'NAPI_FATAL_IF_FAILED'
      Error::Fatal((location), (message));               \
      ~~~~~~~^
/project/node_modules/node-addon-api/napi-inl.h:1461:20: error: no matching function for call
      to 'napi_create_type_error'
          status = napi_create_type_error(env, nullptr, message, &error);
                   ^~~~~~~~~~~~~~~~~~~~~~
/Users/cla/.node-gyp/8.0.0/include/node/node_api.h:147:25: note: candidate function not viable: requires 3 arguments,
      but 4 were provided
NAPI_EXTERN napi_status napi_create_type_error(napi_env env,
                        ^
In file included from ../binding.cpp:4:
In file included from /project/node_modules/node-addon-api/napi.h:1449:
/project/node_modules/node-addon-api/napi-inl.h:1464:20: error: no matching function for call
      to 'napi_create_error'
          status = napi_create_error(env, nullptr,  message, &error);
                   ^~~~~~~~~~~~~~~~~
/Users/cla/.node-gyp/8.0.0/include/node/node_api.h:144:25: note: candidate function not viable: requires 3 arguments,
      but 4 were provided
NAPI_EXTERN napi_status napi_create_error(napi_env env,
                        ^
In file included from ../binding.cpp:4:
In file included from /project/node_modules/node-addon-api/napi.h:1449:
/project/node_modules/node-addon-api/napi-inl.h:1467:9: error: no member named 'Fatal' in
      'Napi::Error'
        NAPI_FATAL_IF_FAILED(status, "Error::New", "napi_create_error");
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi-inl.h:47:14: note: expanded from macro
      'NAPI_FATAL_IF_FAILED'
      Error::Fatal((location), (message));               \
      ~~~~~~~^
/project/node_modules/node-addon-api/napi-inl.h:1476:10: error: no matching function for call
      to 'New'
  return Error::New<Error>(env, message, std::strlen(message), napi_create_error);
         ^~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi.h:1095:19: note: candidate function not viable: no
      known conversion from 'napi_status (napi_env, napi_value, napi_value *)' (aka 'napi_status (napi_env__ *,
      napi_value__ *, napi_value__ **)') to 'create_error_fn' (aka 'napi_status (*)(napi_env__ *, napi_value__ *,
      napi_value__ *, napi_value__ **)') for 4th argument
    static TError New(napi_env env,
                  ^
In file included from ../binding.cpp:4:
In file included from /project/node_modules/node-addon-api/napi.h:1449:
/project/node_modules/node-addon-api/napi-inl.h:1480:10: error: no matching function for call
      to 'New'
  return Error::New<Error>(env, message.c_str(), message.size(), napi_create_error);
         ^~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi.h:1095:19: note: candidate function not viable: no
      known conversion from 'napi_status (napi_env, napi_value, napi_value *)' (aka 'napi_status (napi_env__ *,
      napi_value__ *, napi_value__ **)') to 'create_error_fn' (aka 'napi_status (*)(napi_env__ *, napi_value__ *,
      napi_value__ *, napi_value__ **)') for 4th argument
    static TError New(napi_env env,
                  ^
In file included from ../binding.cpp:4:
In file included from /project/node_modules/node-addon-api/napi.h:1449:
/project/node_modules/node-addon-api/napi-inl.h:1483:8: error: unknown type name
      'NAPI_NO_RETURN'
inline NAPI_NO_RETURN void Error::Fatal(const char* location, const char* message) {
       ^
/project/node_modules/node-addon-api/napi-inl.h:1483:23: error: expected unqualified-id
inline NAPI_NO_RETURN void Error::Fatal(const char* location, const char* message) {
                      ^
/project/node_modules/node-addon-api/napi-inl.h:1496:5: error: no member named 'Fatal' in
      'Napi::Error'
    NAPI_FATAL_IF_FAILED(status, "Error::Error", "napi_create_reference");
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi-inl.h:47:14: note: expanded from macro
      'NAPI_FATAL_IF_FAILED'
      Error::Fatal((location), (message));               \
      ~~~~~~~^
/project/node_modules/node-addon-api/napi-inl.h:1576:10: error: no matching function for call
      to 'New'
  return Error::New<TypeError>(env, message, std::strlen(message), napi_create_type_error);
         ^~~~~~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi-inl.h:1560:22: note: candidate function not viable:
      no known conversion from 'napi_status (napi_env, napi_value, napi_value *)' (aka 'napi_status (napi_env__ *,
      napi_value__ *, napi_value__ **)') to 'create_error_fn' (aka 'napi_status (*)(napi_env__ *, napi_value__ *,
      napi_value__ *, napi_value__ **)') for 4th argument
inline TError Error::New(napi_env env,
                     ^
/project/node_modules/node-addon-api/napi-inl.h:1580:10: error: no matching function for call
      to 'New'
  return Error::New<TypeError>(env, message.c_str(), message.size(), napi_create_type_error);
         ^~~~~~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi-inl.h:1560:22: note: candidate function not viable:
      no known conversion from 'napi_status (napi_env, napi_value, napi_value *)' (aka 'napi_status (napi_env__ *,
      napi_value__ *, napi_value__ **)') to 'create_error_fn' (aka 'napi_status (*)(napi_env__ *, napi_value__ *,
      napi_value__ *, napi_value__ **)') for 4th argument
inline TError Error::New(napi_env env,
                     ^
/project/node_modules/node-addon-api/napi-inl.h:1590:10: error: no matching function for call
      to 'New'
  return Error::New<RangeError>(env, message, std::strlen(message), napi_create_range_error);
         ^~~~~~~~~~~~~~~~~~~~~~
/project/node_modules/node-addon-api/napi-inl.h:1560:22: note: candidate function not viable:
      no known conversion from 'napi_status (napi_env, napi_value, napi_value *)' (aka 'napi_status (napi_env__ *,
      napi_value__ *, napi_value__ **)') to 'create_error_fn' (aka 'napi_status (*)(napi_env__ *, napi_value__ *,
      napi_value__ *, napi_value__ **)') for 4th argument
inline TError Error::New(napi_env env,
                     ^
´´´

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 16 (9 by maintainers)

Most upvoted comments

This is an an example of using the new signature:

https://github.com/nodejs/abi-stable-node-addon-examples/blob/master/4_object_factory/node-addon-api/addon.cc

The method now returns an Object, it can be either the exports object passed in or a new one that you create. I’d update your code to be:

Object Init(Env env, Object exports) {
  exports.Set("myFunction", Function::New(env, myFunction));
  return exports;
}

@NickNaso thank you for the prompt reply.

I will change my code according to your code sample and I will let you know asap.

For the moment try to take a look here when I came back to home I can provide more useful examples https://github.com/NickNaso/conf-ni-2017/blob/master/7-vedis-napi/src/binding.cc