javascript - Node 路由

标签 javascript node.js express routes hapi.js

我正在尝试了解如何构建 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 会使事情变得更简单,但我无法理解如何加载 View ,就像我在此处使用 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...");
});

只需输入 localhost:2000/yourIndexFile.html

或者你可以使用 express(这是一个很棒的模块,你应该学习它)..

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”模块,请尝试将其添加到响应 header 中的代码中。

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

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

关于javascript - Node 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38536195/

相关文章:

javascript - 缩放 SVG 模糊或像素化,不清晰

javascript - 如何使机器人状态显示为 "Online from Mobile"

javascript - 如果文件系统上的 JavaScript 文件发生更改, Node 进程是否会受到保护?

javascript - Express.js (MYSQL) 中的 DELETE 函数不删除行

javascript - 未定义的 Angular 选择误差不是函数

javascript - 在 Javascript 中将正则表达式字符串转换为 RegExp 的不同之处

javascript - 如何等待所有 Promise 在 ExpressJS 中解决?

node.js - express.js 不会异步调用相同的路由器回调吗?

javascript - 将标签文本值获取到 javascript 变量中

javascript - 从对象文字字符串创建对象