用vs2013开发node.js的addon.

?

?

  1. 下载node.js的源代码。

    https://github.com/joyent/node

    如果用svn下载,后面加上/trunk,以免把用不着的branches也下载下来,浪费时间。

  2. 安装VS, express版本也可以。我安装的是vs2013 ultimate.
  3. 安装python 2.x

    http://www.python.org/download/

    注意不能是3.x, 因为node-gyp目前需要2.x. 我安装的是2.7。

  4. 用命令行工具,Cd到node源代码目录,运行vcbuild.bat。

    成功后,会生成Release或者Debug目录以及其他文件。我的生成是Release目录。我们需要的是这个路径下的node.lib 文件,以便在我们的c++项目中引用。

  5. 打开VS2013,创建一个c++空项目。我的项目起名为myaddon2.

  6. 添加一个main.h和main.cpp文件。这两个文件可以分别放在include和 src 文件夹中,以方便管理。

    在main.cpp引用main.h文件。

    #include
    "main.h"

    由于main.h是放在include文件夹中,需要设置一下才可以。

  7. 设置头文件的引用路径。
    需要添加node源代码路径的src, deps\v8\include, deps\uv\include.

  8. 添加lib所在路径。我们需要这个路径下的node.lib文件。

  9. 在Linker中填入node.lib.

  10. 打开网页:

    https://nodejs.org/api/addons.html#addons_wrapping_c_objects

    ?

    复制代码并更改,以下是具体文件的代码:

    Main.h 空。

    Main.cpp:


#include
"main.h"

#include
<node.h>

#include
"myobject.h"

?

using
namespace v8;

?

void InitAll(Handle<Object> exports) {

????MyObject::Init(exports);

}

?

NODE_MODULE(myaddon2, InitAll)

Myobject.h


#ifndef MYOBJECT_H

#define
MYOBJECT_H

?

#include
<node.h>

#include
<node_object_wrap.h>

?

class
MyObject : public node::ObjectWrap {

public:

????static
void Init(v8::Handle<v8::Object> exports);

?

private:

????explicit MyObject(double value = 0);

????~MyObject();

?

????static
void New(const v8::FunctionCallbackInfo<v8::Value>& args);

????static
void PlusOne(const v8::FunctionCallbackInfo<v8::Value>& args);

????static v8::Persistent<v8::Function> constructor;

????double value_;

};

?

#endif

?

Myobject.cpp


#include
"myobject.h"

?

using
namespace v8;

?

Persistent<Function> MyObject::constructor;

?

MyObject::MyObject(double
value) : value_(value) {

}

?

MyObject::~MyObject() {

}

?

void
MyObject::Init(Handle<Object> exports) {

????Isolate* isolate = Isolate::GetCurrent();

?

????// Prepare constructor template

????Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, New);

????tpl->SetClassName(String::NewFromUtf8(isolate, "MyObject"));

????tpl->InstanceTemplate()->SetInternalFieldCount(1);

?

????// Prototype

????NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);

?

????constructor.Reset(isolate, tpl->GetFunction());

????exports->Set(String::NewFromUtf8(isolate, "MyObject"),

????????tpl->GetFunction());

}

?

void
MyObject::New(const
FunctionCallbackInfo<Value>& args) {

????Isolate* isolate = Isolate::GetCurrent();

????HandleScope scope(isolate);

?

????if (args.IsConstructCall()) {

????????// Invoked as constructor: `new MyObject(...)`

????????double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();

????????MyObject* obj = new
MyObject(value);

????????obj->Wrap(args.This());

????????args.GetReturnValue().Set(args.This());

????}

????else {

????????// Invoked as plain function `MyObject(...)`, turn into construct call.

????????const
int argc = 1;

????????Local<Value> argv[argc] = { args[0] };

????????Local<Function> cons = Local<Function>::New(isolate, constructor);

????????args.GetReturnValue().Set(cons->NewInstance(argc, argv));

????}

}

?

void
MyObject::PlusOne(const
FunctionCallbackInfo<Value>& args) {

????Isolate* isolate = Isolate::GetCurrent();

????HandleScope scope(isolate);

?

????MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.Holder());

????obj->value_ += 1;

?

????args.GetReturnValue().Set(Number::New(isolate, obj->value_));

}

?

?

  1. 调试。

    设置vs的debug命令和工作路径。

    调试开始后,会自动启动node命令行。

    可以执行以下的命令查看效果。

    如果在 VS 中打上断点,可以进行跟踪。

  2. 使用addon.

    将生成的myaddon2.node文件拷贝到node.js项目文件夹或者子文件夹下。


    var myaddon2 = require("./addons/myaddon2")

    , nodeJsAddOncdObj;

    ?

    ?

    app.post(‘/api/increase/:num‘, function (req, res){

    ????if( !myobj ) myobj = new myaddon2.MyObject(req.params.num);

    ????res.format({

    ????????//HTML returns us back to the main page, or you can create a success page

    ???????? html: function(){

    ???????????? //only return json.

    ???????? },

    ???????? //JSON returns the item with the message that is has been deleted

    ????????json: function(){

    ???????????? res.json({

    ???????????????? success:true,

    ???????????????? result : myobj.plusOne()

    ???????????? });

    ???????? }

    ???? });

    ?

    });

    ?

    ?

时间: 2024-10-18 08:41:11

用vs2013开发node.js的addon.的相关文章

Node.js C++ addon编写实战(一)之node-gyp

http://deadhorse.me/nodejs/2012/10/08/c_addon_in_nodejs_node_gyp.html 这是一个三篇的系列文章,记录Node.js C++扩展开发中的一些经验与坑.Node.js C++ addon编写实战(一)之node-gypNode.js C++ addon编写实战(二)之对象转换Node.js C++ addon编写实战(三)之Buffer 补上第四篇:Node.js C++ addon编写实战(四)之兼容v0.11+与nan模块 从n

NTVS Tools for Visual Studio(在VS 上开发Node.js)

在VS 上开发  Node.js NTVS(Node.js Tools for Visual Studio)是一款 可以运行在VS2012.VS2013上的一个IDE工具. 使用这个插件对于我们传统.net的开发人员学习node.js无疑是一大福音! NTVS也是开源的,它支持编辑,智能感知,分析,npm,本地与远程调试,以及发布到Azure网站和云服务. NTVS下载地址 装之前不用多说 先把node.js的一套东西给装齐了 1·安装 NTVS下载地址(直接下一步-下一步) 2.打开VS201

VS轻松开发Node.js应用

PTVS开发团队又开发出一款可以在VS里编写Node.js应用程序的插件--NTVS(Node.js Tools for Visual Studio),开发者可以在VS里轻松开发Node.js应用. NTVS是一款开源工具,遵循Apache开源许可,由微软和社区维护.适用于Node.js 0.10.20版或更高的版本上.NTVS具有可编辑.智能提示.分析.NPM.调式(本地和远程)等功能,并且还可以发布在Azure网站和Cloud服务上. Node.js可在32位和64位架构上运行,NTVS也同

intellij IDEA开发node.js

现在网上好像关于IDEA开发node.js的讲解不是太多,今天试了一下,竟然成功了.... 1.安装nodejs http://nodejs.org/download/  自动根据系统下载自己的版本node.js 2.环境变量 windows 安装,不需要配置环境变量   mac安装后,会提示你配置环境变量,需要配置环境变量(貌似) 命令  sudo vim /etc/paths 输入密码 然后将路径输入进去, 3.测试是否成功 控制台输入node -v 或者输入node 进去node模式然后输

使用WebStorm和Git开发Node.js应用

使用WebStorm和Git开发Node.js应用 一.使用WebStorm创建express项目1.创建项目File|new project,先选择location为D:\,输入项目名称Caller,选择Node.js Express项目.2.修改配置:智能感知file|setting|javascript|node.js,在project目录下只选择三个Ecma script,也就是js支持,再选择两个node.js支持.移动到public目录,开启dhtml.html5.注意每行右侧是可多

在Visual Studio上开发Node.js程序

[题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio(NTVS),虽然现在仅发布了1.0 Alpha版本,但使用起来已经非常方便.而且,其开发团队与Python Tools for Visual Studio(PTVS)是同一个,而PTVS就是Visual Studio 2013中要创建自带的Python项目需要安装的那个程序,所以大可放心的使用NT

在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure

[题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在其他机器上运行程序,进而需要远程调试功能,不过还好,NTVS提供的远程调试也非常方便. [系列索引] 在Visual Studio上开发Node.js程序——NTVS介绍及使用 在Visual Studio上开发Node.js程序(2)——NTVS远程调试及发布到Azure [文章索引] NTVS远

在Visual Studio 2013 上开发Node.js程序

[题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio(NTVS),虽然现在仅发布了1.0 Alpha版本,但使用起来已经非常方便.而且,其开发团队与Python Tools for Visual Studio(PTVS)是同一个,而PTVS就是Visual Studio 2013中要创建自带的Python项目需要安装的那个程序,所以大可放心的使用NT

开发Node.js应用最佳IDE Top 10(下)

在开发Node.js应用最佳IDE Top 10(上)一文中,我们为大家介绍了排名前5的开发Node.js应用最佳的IDE,有Cloud 9.Intellij IDEA.WebStorm.Komodo.Koding这五个最受欢迎的IDE.今天,我们将继续为大家揭晓余下的排名,一起来看看都有哪些IDE榜上有名吧! 6) Eclipse Eclipse是一个使用Java. PHP.C++等开发Web的基于云的流行IDE.您可以使用Node.js插件轻松地利用Eclipse IDE的nodeclips