2013-02-16 2 views
0

최근에 많은 질문을하고 있습니다.)
그래서 웹 채팅을 만드는 과정에서 약간의 진전이있었습니다.

그래서 작동하도록했습니다.
제 질문은 텍스트 영역에 무언가를 입력하고 메시지를 입력하면 서버에 로그인됩니다.
node.js - 실제로 어떻게 요청합니까?

코드가 업데이트되어 작동합니다.

Node.js를 파일 - 여기

var http = require('http'); 
var fs = require('fs'); 
var path = require('path'); 

var messages = []; 

// Simple Function to Load all of the HTML/CSS/JavaScript Files. 
function LoadHTML(html, requrl, res) { 
    var filePath = '.' + requrl; 
    if (filePath == './') { 
     filePath = './' + html; 
    } 

    var extname = path.extname(filePath); 
    var contentType = 'text/html'; 
    switch (extname) { 
     case '.js': 
      contentType = 'text/javascript'; 
     break; 
     case '.css': 
      contentType = 'text/css'; 
     break; 
    } 

    fs.exists(filePath, function(exists) { 

     if (exists) { 
      fs.readFile(filePath, function(error, content) { 
       if (error) { 
        res.writeHead(500); 
        res.end(); 
       } 
       else { 
        res.writeHead(200, { 'Content-Type': contentType }); 
        res.end(content, 'utf-8'); 
       } 
      }); 
     } 
     else { 
      res.writeHead(404); 
      res.end(); 
     } 
    }); 
} 

var server = http.createServer(function (req, res) { 

    var url = req.url; 

    LoadHTML('index.html', url, res); 

    if(url.substring(0,16) == "/ser.js?message=") { 
     var message = url.substring(16, url.length); 
     console.log(message); 
    } 

}).listen(8125); 

는 HTML/CSS/자바 스크립트 코드입니다 - http://jsfiddle.net/Q79PK/1/

편집 : 내가, 내가 코드를 업데이트 작업을 얻었다, 당신은 볼 수 배우고;)
위 표결이 좋을 것입니다!

답변

1

http.get(options, callback)은 데이터없이 HTTP GET을 수행하도록 설계되었으므로 사용하지 않아야합니다. 대신 요청에 데이터를 추가 할 수있는 http.request(options, callback)을 사용하십시오. 참조 : 요청 내에 등록한 http://nodejs.org/api/http.html#http_http_request_options_callback 서버 측 로깅

및 처리 된 데이터를 상기 loadHTML 함수 (그리고 req.url)의 파라미터가되도록 netire req 오브젝트를 만든다.

req.addListener("data", function(data) { 
    console.log("data : "+data); 
}); 

을 (그리고 var filePath = '.' + req.url;에 따라 var filePath = '.' + req; 업데이트) : 그럼 당신은 ServerRequest에에 리스너를 추가 할 수 있습니다.

curl -d "some data" http://localhost:8125 

및 서버 측이 다음과 같은 기록이 있습니다 : 여기

data : some data 

가 가득 당신이있는 경우

당신은 컬 명령을 사용하여 요청을 시뮬레이션하여이를 테스트 할 수 있습니다 내가 만든 코드의 수정 :

var http = require('http'); 
var fs = require('fs'); 
var path = require('path'); 

var messages = []; 

// Simple Function to Load all of the HTML/CSS/JavaScript Files. 
function LoadHTML(html, req, res) { 
    var filePath = '.' + req.url; 
    if (filePath == './') { 
     filePath = './' + html; 
    } 

    req.addListener("data", function(data) { 
     console.log("data : "+data); 
    }); 

    var extname = path.extname(filePath); 
    var contentType = 'text/html'; 
    switch (extname) { 
     case '.js': 
      contentType = 'text/javascript'; 
     break; 
     case '.css': 
      contentType = 'text/css'; 
     break; 
    } 

    fs.exists(filePath, function(exists) { 

     if (exists) { 
      fs.readFile(filePath, function(error, content) { 
       if (error) { 
        res.writeHead(500); 
        res.end(); 
       } 
       else { 
        res.writeHead(200, { 'Content-Type': contentType }); 
        res.end(content, 'utf-8'); 
       } 
      }); 
     } 
     else { 
      res.writeHead(404); 
      res.end(); 
     } 
    }); 
} 

var server = http.createServer(function (req, res) { 
    LoadHTML('./index.html', req, res); // Calling the Function to load all of the files. 
}).listen(8125); 

HTH

+0

작동하지 않습니다. 텍스트 영역에 무엇인가를 입력하고 입력을 클릭하면 내 Chrome 콘솔 404에 로그가 기록됩니다. – Israelg99

+0

클라이언트 측에서도 문제가있을 수 있습니다. 링크로 체인 링크의 유효성 검사를 시도하십시오. 서버 쪽에서는 클라이언트 측에서 의존적이지 않으므로 다음과 같이 curl 명령을 수행하여 예상되는 동작을 관리 할 수 ​​있습니까? curl -d "some data" http://localhost:8125? 이 작업이 끝나면 클라이언트 쪽에서 무슨 일이 일어나고 있는지 확인할 수 있습니다. 그러면 서버 측에서 문제가 없는지 확인할 수 있습니다. – Fafhrd

관련 문제