最近用c++先后写了3个node_moudle,有2个放到了npm上,一个项目感觉性能不佳,流产了,总结一下吧:
两个上线项目分别是
A、hvalidator
node简单验证模块,主要验证一些数据格式,以及email地址,ip,url等正则判断,这个模块算是第一个node addon的产出,处女作。
npm install hvalidator
github:https://github.com/DoubleSpout/node-hvalidator
B、ccap
利用CImg图形库和libjpeg库让node不用依赖第三方库生成简单验证码。可以设置验证码的大小,内容,质量等。
npm install ccap
github:https://github.com/DoubleSpout/ccap
v8手册handle
1、一个node的addon基本入口格式应该如下:
1 | #define BUILDING_NODE_EXTENSION |
2、node官方的实例一般都是定义一个class,把要输出给node的方法设置为static静态方法,如下:
1 | #include <node.h> |
比如上面这段代码就定义了一个SimpleF的类,然后定义了很多静态方法供输出给node
3、一个简单的输出给node的静态类方法示例
1 | Handle<Value> SimpleV::isArray(const Arguments& args) {//是否是数组 |
比如上面这段就是输出给node,并且返回一个bool值,告诉node端第一个参数是否为数组
4、静态方法可以返回给node各种不同的格式,比如整形,字符串,数组,对象等
布尔值:return scope.Close(Boolean::New(1)); //返回true
数字:return scope.Close(Number::New(1)); //返回数字1
字符串:
1 | char *a = '1'; |
数组:
1 |
|
对象:
1 | Handle<Object> obj = Object::New(); |
函数:
1 | Handle<Value> MyFunction(const Arguments& args) {//这表定义了一个静态方法 |
5、获取node传递参数的值
获得数字的值:
1 | double:arg[0]->NumberValue () |
6、一些常用的代码片段:
6.1将node端的字符串传化为std::string类型:
1 | void router::toCString(std::string& str, Handle<Value> strp){ |
6.2将c++的std::string转化为char * 返回给node
1 | std::string s; |
6.3 c++的replace函数:
1 | void SimpleF::CSreplace(std::string& s1,std::string& s2,std::string& s3) |
6.4 c++linux下和windows下的正则表达式
linux生成正则表达式(这里没有释放,因为要重复使用该正则):
1 | #include <regex.h> |
windows下的正则生成,同样没有释放内容,重复使用:
1 | #include <regex> |
6.5 c++调用node端的函数:
1 | Local<Function> cb = Local<Function>::Cast(args[0]); |