2016-07-22 101 views
1

我想了解如何构建Node.js项目。与节点路由

我跟着我发现做一个聊天应用程序的教程。

服务器端和客户端之间的路由不起作用。 如果你能向我解释为什么,或者可以给我一个很好的参考,以了解它应该如何协同工作?

这是服务器:

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

这是与客户端脚本的HTML:

<!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> 

也许使用明示或高致病性禽流感会让事情变得更简单,但我不能了解如何加载视图,就像我在这里使用fs模块一样。

谢谢!

+1

你能否提供一些关于“不工作”的细节;你有错误吗?没有明确的错误,事情是不是显示出来? –

+0

您的路由器根本没有连接到您的http服务器,因此没有任何操作。不知道你从哪里得到该代码。如果您按照https://www.npmjs.com/package/router中的示例进行操作,则会看到您缺少路由器连接到http服务器的部分。 – jfriend00

回答

2

我不知道为什么你想发送index.hmml这样的,有做,像更简单的方法..

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

而刚刚输入localhost:2000/yourIndexFile.html

或者你可以用快递(这是真棒模块,你应该学习它)..

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

如果你真的真的想用“FS”模块尝试在响应报头附加给你的代码。

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

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

@bratibrat很好你的路线serer是/测试..但你打电话/客户端/测试检查 –