我有一个使用Node构建的跟踪应用程序,可由我们网络中的其他网站访问。他们将通过他们的html文件的头部访问应用程序,如下所示:
<title>Test</title>
<meta name="generator" content="TextMate http://macromates.com/">
<script src="http://mynetwork.com:1337/tracker.js?pid=publisher1&ps=home"></script>
</head>
<body>
tracker.js文件使用socket.io连接到app.js,后者在MongoDB中存储一些数据。出于某种原因,当启动socket.io然后加载一个引用该Tracker.js脚本的页面时,我在第1行收到错误“Uncaught SyntaxError:Unexpected identifier”,这实际上是“Welcome to socket.io。”消息而不是javascript那个在文件中。
以下是Tracker.js的样子:
(function(document, onload){
var io = document.createElement('script');
io.src = "//cdn.socket.io/stable/socket.io.js";
io.setAttribute('async', 'true');
if ( typeof onload === 'function') {
io.onloadDone = false;
io.onload = function() {
io.onloadDone = true;
onload();
};
io.onreadystatechange = function() {
if ( "loaded" === io.readyState && !io.onloadDone ) {
io.onloadDone = true;
io.onload();
}
};
}
(document.getElementsByTagName('head') || document.getElementsByTagName('body'))[0].appendChild(io);
});
(document, function(){
var socket = io.connect('http://mynetwork.com:1337');
socket.emit('adTracker',
{ adServer: 'datalunk', adZone : 'top_home', referingURL : 'site.com' }
);
socket.on('entrance', function(){
console.log('Response is:' + data.message);
});
});
app.js文件如下所示:
var io = require('socket.io');
var tracker = io.listen(1337);
tracker.configure(function () {
tracker.set('authorization', function (handshakeData, callback) {
if (handshakeData.xdomain) {
callback('Cross-domain connections are not allowed');
} else {
callback(null, true);
}
});
});
tracker.sockets.on('connection', function (socket) {
socket.on('entrance', {message: 'connection has been made to app.js'});
socket.on('adTracker', function (data) {
var adRequestData = data;
var pass = ["bigbooks"];
var databaseUrl = "user:pass@linus.mongohq.com:10006/node-test";
var collections = ["mads"]
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");
});
});
});
任何人都可以告诉我为什么我会收到socket.io欢迎消息&amp;第1行的错误以及如何解决?
答案 0 :(得分:1)
(function(document, onload){
var io = document.createElement('script');
// rest of code
});
(document, function(){
// rest of code
});
});
应该是
(function(document, onload){
var io = document.createElement('script');
// rest of code
})(document, function(){
// rest of code
});
});
你使用一个你应该调用的匿名函数(你不会这样做)。
正确的语法是(更简单的例子):
(function(a) {console.log(a)})('Hello World');
但是你这样做:
(function(a) {console.log(a)});
('Hello World');
答案 1 :(得分:0)
确保服务器安装了最新的稳定版Node。根据官方网站,目前是v0.8.16。
此外,如果socket.io服务器在http://mynetwork.com:1337/上运行,那么我相信您应该能够包含来自http://mynetwork.com:1337/socket.io/socket.io.js的socket.io.js
检查Node版本是否是问题根源的最快方法是安装Node Version Manager,然后安装v0.8.16,最后再次运行socket.io服务器
wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh
nvm install v0.8.16
nvm use 0.8.16
node yourSocketIOserver.js