定义节点 js 的模式路由

Define pattern route for node js

本文关键字:模式 路由 js 节点 定义      更新时间:2023-09-26

我正在使用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聊天。可在所有页面中访问。

提前致谢

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

是的,快递完全支持您列出的路线。文档将其称为">未命名的通配符"。

// 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 /fooGET /bar/baz/qux(,您可以访问聊天。

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

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