2016-07-22 22 views
1

Ich versuche zu verstehen, wie ein Node.js-Projekt zu erstellen.Routing mit Knoten

Ich habe ein Tutorial verfolgt, das ich gefunden habe, um eine Chat-App zu machen.

Das Routing zwischen der Serverseite und der Clientseite funktioniert nicht. Wenn Sie mir erklären könnten, warum, oder vielleicht geben Sie mir einen guten Hinweis zu verstehen, wie alles zusammen funktionieren sollte?

Dies ist der Server:

var http = require('http'); 
    const fs = require('fs'); 
    var Router = require('router') 

    var router = Router(); 
    router.get('/test', function (req, res) { 
     res.setHeader('Content-Type', 'text/plain; charset=utf-8'); 
     res.end('Hello World!'); 
    }) 

    var app = http.createServer(function (request, response) { 
     fs.readFile("public/client.html", 'utf-8', function (error, data) { 
      response.writeHead(200, {'Content-Type': 'text/html'}); 
      response.write(data); 
      response.end(); 
     }); 
    }).listen(1337); 


    var io = require('socket.io').listen(app); 

    io.sockets.on('connection', function(socket) { 
     socket.on('message_to_server', function(data) { 
      io.sockets.emit("message_to_client",{ message: data["message"] }); 
     }); 
    }); 

Und dies ist der HTML-Code mit dem Client-Skript:

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
     <script src="/socket.io/socket.io.js"></script> 
     <script> 
      var socketio = io.connect("127.0.0.1:1337"); 
      socketio.on("message_to_client", function(data) { 
       document.getElementById("chatlog").innerHTML = (document.getElementById("chatlog").innerHTML + "<hr/>" + data['message']); 
      }); 

      var request = $.ajax({ 
          url: "/test", 
          type: "GET" 
         }); 
      request.done(function(msg) { 
       console.log(1111); 
      }); 

      request.fail(function(jqXHR, textStatus) { 
       alert("Request failed: " + textStatus); 
      }); 

      function sendMessage() {     
       var msg = document.getElementById("message_input").value; 
       socketio.emit("message_to_server", { message : msg}); 
       window.scrollTo(0,document.body.scrollHeight); 
      } 
     </script> 

    </head> 
    <body> 
     <div id="wholeChat">     
      <div id="chatlog"></div>     
      <div> 
       <input type="text" id="message_input"/> 
       <button onclick="sendMessage()">send</button> 
      </div> 
     </div>   
    </body> 
</html> 

Vielleicht wird mit ausdrücklicher oder hapi Dinge einfacher machen, aber ich kann dann nicht verstehe, wie ich die Ansicht lade, wie ich hier mit dem fs Modul.

Danke!

+1

können Sie einige Details über "funktioniert nicht"; Hast du einen Fehler erhalten? Erscheinen die Dinge nicht ohne explizite Fehler? –

+0

Ihr Router hat überhaupt keine Verbindung zu Ihrem http-Server und macht somit nichts. Nicht sicher, woher du diesen Code bekommen hast. Wenn Sie dem Beispiel https://www.npmjs.com/package/router folgen, sehen Sie, dass Ihnen der Teil fehlt, an dem Ihr Router mit dem HTTP-Server verbunden ist. – jfriend00

Antwort

2

Ich weiß nicht, warum du so senden index.hmml versuchen, ist es viel einfacher Weg, dies zu tun, wie ..

var connect = require("connect"); 
var serveStatic = require("serve-static"); 
connect().use(serveStatic(__dirname)).listen(2000,function(){ 
    console.log("Server running on 2000..."); 
}); 

Und geben Sie einfach localhost: 2000/yourIndexFile.html

Oder Sie können Express verwenden (was ehrfürchtige Modul ist Sie es lernen sollte) ..

var express = require("express"); 
var app = express(); 
var serv = require("http").Server(app); 

app.get("/",function(req,res){ 
    res.sendFile(__dirname + "/client/index.html"); 
}); 

app.use("/client",express.static(__dirname + "/client")); 

serv.listen(2000); 

Und wenn Sie wirklich wollen, wirklich ‚fs‘ Modul versuchen, diese zu Ihrem Code in Antwort-Header verwenden.

onRequest = function(req,res){  
    res.writeHead(200,{"Content-Type": "text/html"}); 
    fs.createReadStream("./index.html").pipe(res);  
} 

http.createServer(onRequest).listen(2000); 
+0

@bratibrat Nun Ihre Route auf Serer ist/Test ..aber Sie rufen/Client/Test überprüfen, dass –