我发现*v8 :: String :: Utf8Value(args [0] - > ToString())在节点0.8.2 32位上返回正确的字符串,并且不在节点0.8.8上返回正确的字符串64-位.
有谁知道为什么?
我的node.js插件看起来像这样:
#define BUILDING_NODE_EXTENSION
#include <node.h>
#define MAX_OUTPUT_BUF 80
extern "C" char *do_sqlsig(char *in);
using namespace v8;
Handle<Value> Sqlsig(const Arguments& args) {
HandleScope scope;
char *c_arg, *ret;
if (args.Length() < 1) {
ThrowException(Exception::TypeError(String::New("Wrong number of arguments")));
return scope.Close(Undefined());
}
c_arg = *v8::String::Utf8Value(args[0]->ToString());
ret = c_arg; //do_sqlsig(c_arg);
return scope.Close(String::New(ret));
}
void Init(Handle<Object> exports) {
exports->Set(String::NewSymbol("sqlsig"),
FunctionTemplate::New(Sqlsig)->GetFunction());
}
NODE_MODULE(sqlsig, Init)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在为C函数do_sqlsig编写一个包装器.我非常了解C并且对C++知之甚少
如何将从 crypto.randomBytes 返回的字节数组转换为浮点数?我正在为 Math.random() 写一个小的替代品
var http = require('http');
var url= require('url');
var util= require('util');
var fs = require('fs');
var body_404="<html><body><center>404 error</center></body></html>";
http.createServer(function (req,res) {
var what = url.parse("http://127.0.0.1:1235"+req.url);
var pathname = what.pathname;
switch(pathname) {
case "/":
pathname="/www/index.html";
default:
res.writeHead(200, {'Content-type' : 'text/html'});
ret = res;
fs.stat("."+pathname, function (err, stat) {
if(err)
res.write(body_404);
else
res.write(fs.readFileSync("."+pathname));
});
res.end();
break;
}
}).listen(1235, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)
我想知道为什么fs.stat回调中的write方法实际上并没有向客户端写任何内容.我相信res在范围内.
我来自C背景,发现javascript的异步性非常酷.但我不知道事情是如何异步的.是不是每个函数调用实际上都是一个新线程?