与节点路由

我想了解如何构build一个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> 

也许使用express或hapi会使事情变得更简单,但是我不明白我怎样加载视图,就像我在这里使用fs模块一样。

谢谢!

我不知道你为什么要发送index.hmml那样,有更简单的方法来做到这一点,就像..

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

只需inputlocalhost: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);