0

我正在使用Node.js和 express 来制作网络聊天应用程序。我有一个关于路由的问题。

我的路线是:

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

据我所知,这意味着所有客户都应该去http://www.example.com/index.html页面访问聊天。(也许,不确定)

是否可以有这样的模式 URL:

app.get("/*", function( req, res ) {
    res.sendfile( __dirname + "/*" );
});

这样任何用户都可以访问任何 URL 上的聊天
简而言之:类似于 facebook 聊天。可在所有页面中访问。

提前致谢

4

2 回答 2

3

是否可以有这样的模式 URL:

是的,Express 完全支持您列出的路线。文档将其称为“未命名的通配符”。

// GET /foo     -> (200) "foo"
// GET /baz/qux -> (200) "baz/qux"

app.get('/*', function (req, res) {
    res.send(req.params[0]);
});

但是,对于您的示例,Express/Connect 包含一个static()中间件,用于通过将 URL 路径组合到基本目录来提供文件:

app.use(express.static(__dirname));

类似facebook聊天的东西。可在所有页面中访问。

这不一定与路由有很大关系。您的应用程序可能需要一个路由来收集联系人列表或其他持久数据,但实际的“聊天”将单独管理。

一般来说,这将取决于在每个页面中包含公共内容——如果您使用视图/模板,可能通过“布局”或“继承”来显示输入消息的表单和显示聊天历史的区域。此外,相当多的聊天“工作”必须在客户端完成。

一个简单的例子是为多个 URL 提供同一个文件:

var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);

app.get('/*', function (req, res) {
    res.sendfile(__dirname + '/chat.html');
});

var chat = io
    .of('/chat') // namespace
    .on('connection', function (socket) {
        socket.on('message', function (data) {
            chat.emit('message', data);
        });
    });

server.listen(3000);

并且,在该文件中:

<div id="chat-log"></div>
<form id="chat-send">
    <input name="message">
    <input type="submit" value="Send">
</form>

<script src="/socket.io/socket.io.js"></script>
<script>
    var chatForm = document.getElementById('chat-send');
    var chatLog = document.getElementById('chat-log');

    var chatSocket = io.connect('/chat');

    chatSocket.on('message', function (data) {
        chatLog
            .appendChild(document.createElement('div'))
            .appendChild(document.createTextNode(data.text));
    });

    chatForm.onsubmit = function () {
        chatSocket.emit('message', {
            text: chatForm.message.value
        });

        chatForm.message.value = '';
        chatForm.message.focus();
        return false;
    };
</script>

然后,您可以从任何地址 ( GET /, GET /foo, GET /bar/baz/qux) 访问聊天。

于 2013-10-10T19:13:02.087 回答
0

您可能会想要使用这样的 url 参数:

app.get("/:chatter",function(req,res){
    console.log("the chatter is",req.param('chatter'));
    res.sendfile( __dirname + "/index.html" );
    ...
});
于 2013-10-10T16:41:45.690 回答