定义节点js的模式路由

时间:2013-10-10 16:38:51

标签: javascript node.js routes

我正在使用Node.js并表达以制作网络聊天应用程序。我有关于路由的问题。

我的路线是:

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

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

是否可以使用这样的模式网址:

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

以便任何用户都可以访问任何网址上的聊天 简而言之:像Facebook聊天一样。可以在所有页面访问。

提前致谢

2 个答案:

答案 0 :(得分: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() middleware用于通过将URL路径组合到基本目录来提供服务文件:

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

  

像facebook聊天的东西。可以在所有页面访问。

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

一般情况下,如果你使用的是视图/模板,它将取决于在每个页面中包含常见内容 - 可能通过“ layout ”或“ inheritance ” - 显示输入消息的表单和显示聊天记录的区域。此外,聊天的大量“工作”必须在客户端完成。

一个简单的示例是为多个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 /fooGET /bar/baz/qux)访问聊天。

答案 1 :(得分:0)

你可能想要使用这样的url param:

app.get("/:chatter",function(req,res){
    console.log("the chatter is",req.param('chatter'));
    res.sendfile( __dirname + "/index.html" );
    ...
});