如果想在node.js平台上进行更深层次的开发,必须了解和熟悉node.js的addon开发。正如node.js官方网站上的addon开发文档所描述的那样,开发addon所需的API及知识背景非常复杂。但我认为开发addon需要一个渐进的过程。在经历过一个学习过程后,进行addon开发就会是一个水到渠成的事。相较简单了解了node.js就进行addon开发,那会容易很多。大致的学习路线我觉得应该是这样:
学习javascript语言。
了解V8的基本概念。https://developers.google.com/v8/,这个网站提供了这些信息。
学习node.js。入门中文文档当属InfoQ的《深入浅出Node.js》。
一、例子
下面是一个很好的例子,功能很简单就是在控制台下输出“world”字串。这个简单的示例可以用js和addon两种方式实现。这样我们就能找出C++代码中与js代码中一一对应的部分,进而更好地理解addon开发模型。
首先说明js示例。将下面这些代码放置在一个单独的js文件中,例如a.js。
module.exports.hello = function() { return 'world'; };然后在node中这样使用它。
var a = require('a.js'); console.log(a.hello());
#include <node.h> #include <v8.h> using namespace v8; Handle<Value> Method(const Arguments& args) { HandleScope scope; return scope.Close(String::New("world")); } void init(Handle<Object> exports) { exports->Set(String::NewSymbol("hello"), FunctionTemplate::New(Method)->GetFunction()); } NODE_MODULE(hello, init)
node中这样使用这个addon
var a = require('hello.node'); console.log(a.hello());
二、exports vs module.exports
exports与module.exports的区别。后者可以在require返回的对象上直接加'()'使用。前者必须加'.'再跟一个名称。
参考文章:
http://nodejs.org/docs/latest/api/modules.html
http://openmymind.net/2012/2/3/Node-Require-and-Exports/
http://blog.csdn.net/danhuang2012/article/details/7676061