私はNodeJSの完全な初心者であり、アプリの構造を理解しようとしています。私はSocket.IOとMongoJSを使用する基本的なアプリを持っています。これは基本的に、クライアント側のスクリプトから変数を取得してMongoに保存する追跡システムです。
これが私がそれがうまくいくと想像した方法です:
- ユーザーが10のサイトの1つにページをロードする
- そのページのJSファイルは、参照URLとタイムスタンプをキャプチャします
- これらの2つの値は、Socket.IOを介してノードアプリに渡されます。
- 次に、アプリはMongoDBに接続し、値を保存します
これは非常に簡単に思えますが、ここに私の混乱があります。すべてのドキュメントと例で、socket.ioへの接続はアプリ内にあるHTMLページを介して行われていることを確認しました。私の場合、唯一のクライアント側ファイルは、追跡情報を収集する単一のjavascriptファイルです。
これが、socket.ioクライアント側JSを使用してサーバーに接続する方法です。
$.getScript('/socket.io/socket.io.js', function(data){
console.log(data);
});
var cmnPub = "Publishers.com"
var socket = io.connect(document.location.href);
socket.emit('adTracker', {
publisher: cmnPub, time : timeStamp, referingURL : document.location.href
});
これが私のサーバーサイドコードです:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(1337);
io.configure(function () {
io.set('authorization', function (handshakeData, callback) {
if (handshakeData.xdomain) {
callback('Cross-domain connections are not allowed');
} else {
callback(null, true);
}
});
});
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
socket.on('adTracker', function (data) {
var adRequestData = data;
var pass = ["bigbooks"];
var databaseUrl = "username:password@linus.mongohq.com:10006/node-test";
var collections = ["cmnads"]
var db = require("mongojs").connect(databaseUrl, collections);
db.cmnads.insert({adRequest : adRequestData}, {$set: {password: pass}}, function(err, updated) {
if( err || !updated ) console.log("User not updated");
else console.log("User updated");
});
});
});
アプリがローカルの場合、上記のコードがMongoDBコレクションに入力されることはわかっていますが、別のサイトからアクセスしようとすると、次のエラーが表示されます。
キャッチされないSyntaxError:予期しないトークン-myapp.js:1 <
さらに調査したところ、アプリがindex.htmlページを読み込んでいるため、サーバーの構成が間違っているようですが、構成がどうあるべきかわかりません。外部URLからクライアント側のJSをロードし、サーバーに接続してトラッキングをアプリに渡す場合、サーバーをどのように設定する必要がありますか?