2012-12-18 7 views
1

NodeJS에 대한 완전한 멍청한 의견이며 앱 구조를 이해하려고합니다. 나는 Socket.IO와 MongoJS를 사용하는 기본 앱을 가지고있다. 이것은 기본적으로 클라이언트 측 스크립트에서 변수를 가져 와서 Mongo에 저장하는 추적 시스템이다. 나는 그것이 작동 상상 방법은 다음과클라이언트 측 JS를 서버 측에 연결 NodeJS app

은 다음과 같습니다

  • 사용자가 우리의 10 개 사이트의 1에 페이지를로드
  • 해당 페이지의
  • JS 파일은 참조 URL 및 타임 스탬프를 캡처
  • 그 2 값들은 노드 앱 앱 다음 MongoDB를 연결하고

를이 S 값을 저장

  • 에 Socket.IO 통해 전달 매우 똑바로 앞으로하지만 내 혼란이 여기에 있습니다. 모든 문서 및 예제에서 socket.io에 대한 연결은 응용 프로그램에있는 HTML 페이지를 통해 이루어 졌음을 알았습니다. 내 경우 유일한 클라이언트 측 파일은 추적 정보를 수집하는 단일 javascript 파일입니다. 여기

    내가 socket.io 클라이언트 측 JS와 서버에 연결하고자하는 방법이다 : 나는 위의 코드를 알고

    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"); 
        }); 
        }); 
    }); 
    

    : 여기

    $.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 
         }); 
    

    내 서버 측 코드 앱이 로컬이지만 다른 사이트에서 액세스하려고하면 다음 오류가 표시됩니다.

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

    추가 연구가 끝나면 내 응용 프로그램이 index.html 페이지를로드하기 때문에 서버 구성이 잘못되었지만 내 구성이 무엇인지 잘 모르겠습니다. 외부 URL에서 클라이언트 측 JS를로드 한 다음 내 서버에 연결하여 추적을 내 응용 프로그램에 전달하려면 서버를 어떻게 설정해야합니까 ??

  • 답변

    2

    JS 파일은 코드 컨테이너 일 뿐이므로 이러한 JS 파일의 코드가 실행되는 런타임을 고려해야합니다. 보여주는이 코드는 서버에서 다운로드하여 브라우저에서 실행되는 클라이언트 측 코드입니다. 따라서 코드에서 socket.io에 "연결"하지 않고 서버에 연결하고 있습니다.

    "document.location.href"에 연결하면 서버 측 코드에 따라이 js 파일을 다시 가져옵니다. 예를 들어 http://socket.io/

    과 같은 서버 측 로직을 포함하는 올바른 서버 URL에 연결해야합니다. 자세한 솔루션은 서버 측 코드와 자세한 오류 로그를 게시하십시오.

    +0

    감사합니다. Luis, 서버 측 코드를 포함하도록 제 질문을 업데이트했습니다. – HjalmarCarlson

    관련 문제