私は C++ で nodejs プラグインを作成しました。jQuery を使用して、ローカルでホストされている Web ページ内からそれを呼び出そうとしています。同じオリジンポリシーのためにnodejsを直接呼び出すことができないことを読んだので、jsonpを使用する必要があります。注: 私は jquery、nodejs、および json(p) にかなり慣れていませんが、冒険心があります。現在、次のコードを使用しています。
node_test.js:
var mylib = require("./mylibrary");
var http = require("http");
http.createServer(function(req, res) {
console.log("Received request: " + JSON.stringify(req.url));
res.writeHead(200, {"Content-type": "text/plain"});
res.end('_testcb(\'{"message": "' + mylib.my_awesome_function() + '"}\')');
}).listen(1337);
index.html:
index.html:
<DOCTYPE HTML>
<html>
<head>
<title>
NodeJS test
</title>
<link rel='stylesheet' type='text/css' href='style.css'/>
<script type='text/javascript' src='jquery.js'></script>
</head>
<body>
<div id="test"></div>
<script>
$(document).ready(function() {
$.ajax({
url: "http://127.0.0.1:1337/",
dataType: "jsonp",
jsonpCallback: "_testcb",
cache: false,
data: "test_data",
timeout: 5000,
success: function(data) {
$("#test").append(data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert('error ' + textStatus + " " + errorThrown);
}
});
});
</script>
</body>
</html>
ブラウザで実行node node_test.js
して表示するとindex.html
、関数が呼び出されます。ただし、独自の nodejs ライブラリから複数の関数を実行できるようにしたいと考えています。nodejs アプリに送信するデータを何らかの方法で解析し、次のように大きなスイッチ ケースを実行することを考えました。
var reply = "";
switch (data) {
case 1:
reply = mylib.my_awesome_function();
break;
case 2:
reply = mylib.my_cool_function();
break;
// repeat for every function I have
}
// send reply
しかし、これが意図した方法であるかどうかはわかりません。WebページのjQuery/javascript内からnodejsを複数呼び出すためのより良い/よりスマートな方法はありますか?