我是NodeJS的完全noob,我試圖瞭解應用程序結構。我有一個使用Socket.IO和MongoJS的基本應用程序,它本質上是一個跟蹤系統,它從客戶端腳本中提取變量並將它們存儲在Mongo中。將客戶端JS連接到服務器端NodeJS應用程序
這裏是我想象它會工作:
- 用戶負載在我們的10個站點的1頁 該網頁上
- JS文件捕獲引用URL和時間戳
- 那些2值然後被經由Socket.IO傳遞到節點應用
- 該應用程序然後連接到MongoDB的並存儲的值
該S eems非常直接,但這裏是我的困惑所在。在所有的文檔和例子中,我看到了與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:[email protected]: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集合,如果應用程序是本地的,但只要我嘗試從另一個站點訪問它,我會看到以下錯誤:
Uncaught SyntaxError: Unexpected token - myapp.js:1 <
經過深入研究,我的服務器配置出現錯誤,因爲我的應用正在加載index.html頁面,但我不確定我的配置應該是什麼。如果我想從外部URL加載客戶端JS,然後連接到我的服務器以將跟蹤傳遞到我的應用程序,應該如何設置我的服務器?
謝謝路易斯,我已經更新了我的問題,包括服務器端代碼。 – HjalmarCarlson