首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义节点js的模式路由

定义节点js的模式路由
EN

Stack Overflow用户
提问于 2013-10-10 16:38:51
回答 2查看 473关注 0票数 0

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

我的路线是:

代码语言:javascript
复制
app.get("/", function( req, res ) {
    res.sendfile( __dirname + "/index.html" );
});

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

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

代码语言:javascript
复制
app.get("/*", function( req, res ) {
    res.sendfile( __dirname + "/*" );
});

这样,任何用户都可以访问在任何URL上聊天

简而言之,,类似于facebook聊天。在所有页面中都可以访问。

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-10 19:13:02

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

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

代码语言:javascript
复制
// GET /foo     -> (200) "foo"
// GET /baz/qux -> (200) "baz/qux"

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

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

代码语言:javascript
复制
app.use(express.static(__dirname));

就像facebook聊天一样。在所有页面中都可以访问。

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

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

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

代码语言:javascript
复制
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);

在这份文件中:

代码语言:javascript
复制
<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)访问聊天。

票数 2
EN

Stack Overflow用户

发布于 2013-10-10 16:41:45

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

代码语言:javascript
复制
app.get("/:chatter",function(req,res){
    console.log("the chatter is",req.param('chatter'));
    res.sendfile( __dirname + "/index.html" );
    ...
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19301483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档