小编Mik*_*yne的帖子

从Node.js调用C++库(Node addons/node-ffi)

我正在尝试将外部C++库(我可以访问.so文件以及头文件)集成到我的Node.js应用程序中.

经过大量研究后,我的选择减少到:

  1. 编写节点插件

  2. 使用node-ffi

从node-ffi的gitHub的定义我无法判断它是否会直接在C++库上运行:

node-ffi是一个Node.js插件,用于使用纯JavaScript加载和调用动态库.它可用于创建与本机库的绑定,而无需编写任何C++代码.

所以我的问题是:

  • 选项1)是否意味着以某种方式重写外部C++库?
  • node-ffi是否能够直接调用C++库而不需要编写任何类型的C包装器?

I'm no expert when it comes to C/C++ so if I missed something basic for you to be able to answer please let me know so I can improve my question.

node.js node-ffi node.js-addon

9
推荐指数
1
解决办法
1万
查看次数

将结构数组的值从JS设置为GLSL

我一直在尝试制作一个包含我的WebGL应用程序所有灯光的结构,而且我很难设置JS的值.结构如下:

struct Light {
    vec4 position;
    vec4 ambient;
    vec4 diffuse;
    vec4 specular;
    vec3 spotDirection;
    float spotCutOff;
    float constantAttenuation;
    float linearAttenuation;
    float quadraticAttenuation;
    float spotExponent;
    float spotLightCosCutOff;
};
uniform Light lights[numLights];
Run Code Online (Sandbox Code Playgroud)

在测试了大量的东西之后我才开始工作,但是我对我写的代码不满意:

program.uniform.lights = []; 
    program.uniform.lights.push({
        position: "",
        diffuse: "",
        specular: "",
        ambient: "",
        spotDirection: "",
        spotCutOff: "",
        constantAttenuation: "",
        linearAttenuation: "",
        quadraticAttenuation: "",
        spotExponent: "",
        spotLightCosCutOff: ""         
    });


            program.uniform.lights[0].position = gl.getUniformLocation(program, "lights[0].position");
            program.uniform.lights[0].diffuse = gl.getUniformLocation(program, "lights[0].diffuse");
            program.uniform.lights[0].specular = gl.getUniformLocation(program, "lights[0].specular");
            program.uniform.lights[0].ambient = gl.getUniformLocation(program, "lights[0].ambient");

    ... and so on
Run Code Online (Sandbox Code Playgroud)

我很抱歉让你看看这段代码,我知道这很糟糕,但我找不到更好的方法.

是否有正确的标准或推荐方法?任何人都可以开导我吗?

javascript glsl webgl

3
推荐指数
1
解决办法
2866
查看次数

通过使用模块node-config更改环境变量来更改运行时的配置

我正在尝试使用node-config模块在运行时更改我的配置的某些参数(基本上是日志记录级别).在官方文件中说:

环境变量可用于覆盖文件配置.以$ CONFIG_开头的任何环境变量都将设置到CONFIG对象中.

我已经检查过,当服务器启动时这是真的,但一旦启动它似乎不起作用.(更改环境变量时,永远不会调用watch函数的处理函数,这与runtime.json文件中的更改或直接更改配置变量不同).

我目前正在观看整个CONFIG对象:

var CONFIG = require('config');
CONFIG.watch( CONFIG , null , function(object, propertyName, priorValue, newValue){
    console.log("Configuration change detected");
});
Run Code Online (Sandbox Code Playgroud)

有谁知道这是否可能?

node.js node-modules

3
推荐指数
1
解决办法
2265
查看次数

Promise 超时后停止执行

我一直在使用 Q 模块来实现我正在从事的项目的承诺。我使用静态方法 Q.fncall() 从 node.js 样式函数创建承诺(基于返回 err,result 的回调)。

问题是我需要在一段时间后停止执行该函数,所以我使用了Q模块的“超时”函数。因此,在 x 时间后,完成函数上的“错误”回调将执行,让我处理超时,但函数本身会继续执行,直到到达最终回调,即使处理程序不再侦听。

问题是:有没有办法让函数执行超时后停止执行?我知道我可以在超时处理程序上设置一个变量,并在超时结束时继续检查函数,但我希望有一种更干净的方法来实现这一点。

代码如下:

        Q.nfcall(test1, id)
        .timeout(1000)
        .done(
            function (value) {
                console.log("SUCCESS: " + value);
            }, 
            function (reason) {
                console.log("ERROR " + reason);
            },
            function (progress) {
                console.log("PROGRESS " + progress);
            }
        );
Run Code Online (Sandbox Code Playgroud)

和 test1 函数:

function test1(id,callback){
db_rw_pool.query("SELECT * FROM table WHERE id=?",[id], function(err,result) {
    if(err){
        callback(err,null);
    }
    else {
        setTimeout(function(){
            console.log("I DON'T WANT YOU TO BRE PRINTED")
            callback(null,result);
        },2000);

    }
    return;
});
Run Code Online (Sandbox Code Playgroud)

}

在我的理想情况下,setTimeout(...,2000) 中的代码永远不应该被执行。这可能吗?

提前致谢。

callback node.js promise q

2
推荐指数
1
解决办法
1957
查看次数