我正在尝试将外部C++库(我可以访问.so文件以及头文件)集成到我的Node.js应用程序中.
经过大量研究后,我的选择减少到:
从node-ffi的gitHub的定义我无法判断它是否会直接在C++库上运行:
node-ffi是一个Node.js插件,用于使用纯JavaScript加载和调用动态库.它可用于创建与本机库的绑定,而无需编写任何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.
我一直在尝试制作一个包含我的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)
我很抱歉让你看看这段代码,我知道这很糟糕,但我找不到更好的方法.
是否有正确的标准或推荐方法?任何人都可以开导我吗?
我正在尝试使用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)
有谁知道这是否可能?
我一直在使用 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) 中的代码永远不应该被执行。这可能吗?
提前致谢。
node.js ×3
callback ×1
glsl ×1
javascript ×1
node-ffi ×1
node-modules ×1
promise ×1
q ×1
webgl ×1