Miscellaneous Node Helpers

  • Nan::MakeCallback()
  • Nan::ObjectWrap
  • NAN_MODULE_INIT()
  • Nan::Export()

Nan::MakeCallback()

Wrappers around node::MakeCallback() providing a consistent API across all supported versions of Node.

Use MakeCallback() rather than using v8::Function#Call() directly in order to properly process internal Node functionality including domains, async hooks, the microtask queue, and other debugging functionality.

Signatures:

v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object> target,
                                       v8::Local<v8::Function> func,
                                       int argc,
                                       v8::Local<v8::Value>* argv);
v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object> target,
                                       v8::Local<v8::String> symbol,
                                       int argc,
                                       v8::Local<v8::Value>* argv);
v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object> target,
                                       const char* method,
                                       int argc,
                                       v8::Local<v8::Value>* argv);

Nan::ObjectWrap()

A reimplementation of node::ObjectWrap that adds some API not present in older versions of Node. Should be preferred over node::ObjectWrap in all cases for consistency.

See the Node documentation on Wrapping C++ Objects for more details.

Definition:

class ObjectWrap {
 public:
  ObjectWrap();

  virtual ~ObjectWrap();

  template <class T>
  static inline T* Unwrap(v8::Local<v8::Object> handle);

  inline v8::Local<v8::Object> handle();

  inline Nan::Persistent<v8::Object>& persistent();

 protected:
  inline void Wrap(v8::Local<v8::Object> handle);

  inline void MakeWeak();

  /* Ref() marks the object as being attached to an event loop.
   * Refed objects will not be garbage collected, even if
   * all references are lost.
   */
  virtual void Ref();

  /* Unref() marks an object as detached from the event loop.  This is its
   * default state.  When an object with a "weak" reference changes from
   * attached to detached state it will be freed. Be careful not to access
   * the object after making this call as it might be gone!
   * (A "weak reference" means an object that only has a
   * persistant handle.)
   *
   * DO NOT CALL THIS FROM DESTRUCTOR
   */
  virtual void Unref();

  int refs_;  // ro
};

NAN_MODULE_INIT()

Used to define the entry point function to a Node add-on. Creates a function with a given name that receives a target object representing the equivalent of the JavaScript exports object.

See example below.

Nan::Export()

A simple helper to register a v8::FunctionTemplate from a JavaScript-accessible method (see Methods) as a property on an object. Can be used in a way similar to assigning properties to module.exports in JavaScript.

Signature:

void Export(v8::Local<v8::Object> target, const char *name, Nan::FunctionCallback f)

Also available as the shortcut NAN_EXPORT macro.

Example:

NAN_METHOD(Foo) {
  ...
}

NAN_MODULE_INIT(Init) {
  NAN_EXPORT(target, Foo);
}