我正在 Node 中构建一个跟踪系统,需要一些帮助来了解使用跟踪脚本的 3rd 方将如何连接到 Node 应用程序。
最初我设置了一个页面来使用 Socket.io 连接到应用程序,但该解决方案似乎只有在客户端页面托管在 Node 服务器上时才有效。因此,例如在第 3 方网站上,他们将拥有:
该脚本将从站点收集数据,然后通过 socket.io 连接到应用程序,但我似乎无法得到任何响应,因为应用程序正在侦听来自应用程序本身的 index.html 文件的请求,而不是来自 tracker.js 脚本。
这是我要运行应用程序的流程:
tracker.js 将使用以下连接:
$.getScript('/socket.io/socket.io.js', function(data){
var socket = io.connect('http://node.appserver.com:8080');
socket.emit('adTracker',
{ adServer: 'datalunk', zone : 'top_home', referingURL : 'comple.com' }
);
});
然后应用程序看起来像这样:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(8080);
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");
});
});
});
有人可以告诉我应该如何将我们的网络站点连接到实际的 Node 应用程序吗?