## 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: ```c++ v8::Local Nan::MakeCallback(v8::Local target, v8::Local func, int argc, v8::Local* argv); v8::Local Nan::MakeCallback(v8::Local target, v8::Local symbol, int argc, v8::Local* argv); v8::Local Nan::MakeCallback(v8::Local target, const char* method, int argc, v8::Local* 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](https://nodejs.org/api/addons.html#addons_wrapping_c_objects) for more details. Definition: ```c++ class ObjectWrap { public: ObjectWrap(); virtual ~ObjectWrap(); template static inline T* Unwrap(v8::Local handle); inline v8::Local handle(); inline Nan::Persistent& persistent(); protected: inline void Wrap(v8::Local 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](./methods.md)) as a property on an object. Can be used in a way similar to assigning properties to `module.exports` in JavaScript. Signature: ```c++ void Export(v8::Local target, const char *name, Nan::FunctionCallback f) ``` Also available as the shortcut `NAN_EXPORT` macro. Example: ```c++ NAN_METHOD(Foo) { ... } NAN_MODULE_INIT(Init) { NAN_EXPORT(target, Foo); } ```