gpt4 book ai didi

javascript - 将客户端 JS 连接到服务器端 NodeJS 应用程序

转载 作者:行者123 更新时间:2023-11-30 18:13:34 25 4
gpt4 key购买 nike

我完全是 NodeJS 的菜鸟,我正在尝试了解应用程序结构。我有一个使用 Socket.IO 和 MongoJS 的基本应用程序,它本质上是一个跟踪系统,从客户端脚本中提取变量并将它们存储在 Mongo 中。

这是我想象的它的工作方式:

  • 用户在我们 10 个网站中的 1 个上加载了一个页面
  • 该页面上的 JS 文件捕获引用 URL 和时间戳
  • 然后将这 2 个值通过 Socket.IO 传递给 Node 应用
  • 然后该应用连接到 MongoDB 并存储值

这看起来非常简单,但这正是我的困惑所在。在所有文档和示例中,我已经看到与 socket.io 的连接是通过应用程序中的 HTML 页面实现的。在我的例子中,唯一的客户端文件是一个收集跟踪信息的 javascript 文件。

以下是我想如何使用客户端 JS 的 socket.io 连接到服务器:

$.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 集合,但是一旦我尝试从另一个站点访问它,我就会看到以下错误:

Uncaught SyntaxError: Unexpected token - myapp.js:1 <

经过进一步研究,我的服务器配置似乎是错误的,因为我的应用正在加载 index.html 页面,但我不确定我的配置应该是什么。如果我想从外部 URL 加载客户端 JS,然后连接到我的服务器以将跟踪传递到我的应用程序,我的服务器应该如何设置?

最佳答案

JS 文件只是代码容器,你应该考虑这些 JS 文件中的代码执行的运行时。您显示的这段代码是从服务器下载并在浏览器上执行的客户端代码。因此,您不是在代码中“连接”到 socket.io,而是连接到服务器。

如果您连接到“document.location.href”,根据您的服务器端代码,您将再次获取此 js 文件。您需要连接到包含服务器端逻辑的正确服务器 URL,如 http://socket.io/ 中所示。

请发布您的服务器端代码和详细的错误日志以获得更详细的解决方案。

关于javascript - 将客户端 JS 连接到服务器端 NodeJS 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13937295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com