await, Promises를 사용하지 않고 (우리 자신을 제외하고) 어떤 (외부) 라이브러리를 포함하지 않고도 당신 (그리고 나)이 원하는 것을 실제로 얻었습니다.
방법은 다음과 같습니다.
node.js와 함께 사용할 C ++ 모듈을 만들고 해당 C ++ 모듈 함수가 HTTP 요청을 만들고 데이터를 문자열로 반환하며 다음을 수행하여 직접 사용할 수 있습니다.
var myData = newModule.get(url);
시작할 준비 가 되셨 습니까?
1 단계 : 컴퓨터의 다른 곳에 새 폴더를 만듭니다.이 폴더를 사용하여 module.node 파일 (C ++에서 컴파일 됨)을 빌드하고 나중에 이동할 수 있습니다.
새 폴더에서 (정리를 위해 mynewFolder / src에 넣었습니다) :
npm init
그때
npm install node-gyp -g
이제 2 개의 새 파일을 만듭니다 : 1, something.cpp라고 부르고이 코드를 그 안에 넣습니다 (또는 원하는 경우 수정).
#pragma comment(lib, "urlmon.lib")
#include <sstream>
#include <WTypes.h>
#include <node.h>
#include <urlmon.h>
#include <iostream>
using namespace std;
using namespace v8;
Local<Value> S(const char* inp, Isolate* is) {
return String::NewFromUtf8(
is,
inp,
NewStringType::kNormal
).ToLocalChecked();
}
Local<Value> N(double inp, Isolate* is) {
return Number::New(
is,
inp
);
}
const char* stdStr(Local<Value> str, Isolate* is) {
String::Utf8Value val(is, str);
return *val;
}
double num(Local<Value> inp) {
return inp.As<Number>()->Value();
}
Local<Value> str(Local<Value> inp) {
return inp.As<String>();
}
Local<Value> get(const char* url, Isolate* is) {
IStream* stream;
HRESULT res = URLOpenBlockingStream(0, url, &stream, 0, 0);
char buffer[100];
unsigned long bytesReadSoFar;
stringstream ss;
stream->Read(buffer, 100, &bytesReadSoFar);
while(bytesReadSoFar > 0U) {
ss.write(buffer, (long long) bytesReadSoFar);
stream->Read(buffer, 100, &bytesReadSoFar);
}
stream->Release();
const string tmp = ss.str();
const char* cstr = tmp.c_str();
return S(cstr, is);
}
void Hello(const FunctionCallbackInfo<Value>& arguments) {
cout << "Yo there!!" << endl;
Isolate* is = arguments.GetIsolate();
Local<Context> ctx = is->GetCurrentContext();
const char* url = stdStr(arguments[0], is);
Local<Value> pg = get(url,is);
Local<Object> obj = Object::New(is);
obj->Set(ctx,
S("result",is),
pg
);
arguments.GetReturnValue().Set(
obj
);
}
void Init(Local<Object> exports) {
NODE_SET_METHOD(exports, "get", Hello);
}
NODE_MODULE(cobypp, Init);
이제라는 동일한 디렉토리에 새 파일을 만들고 something.gyp
다음과 같은 내용을 넣습니다.
{
"targets": [
{
"target_name": "cobypp",
"sources": [ "src/cobypp.cpp" ]
}
]
}
이제 package.json 파일에 다음을 추가하십시오. "gypfile": true,
이제 : 콘솔에서 node-gyp rebuild
전체 명령을 통과하고 오류없이 끝에 "ok"라고 말하면 (거의) 괜찮은 것입니다. 그렇지 않은 경우에는 주석을 남기십시오.
그러나 그것이 작동한다면 build / Release / cobypp.node (또는 당신을 위해 호출 된 것)로 이동하여 주 node.js 폴더에 복사 한 다음 node.js에 복사하십시오.
var myCPP = require("./cobypp")
var myData = myCPP.get("http://google.com").result;
console.log(myData);
..
response.end(myData);//or whatever