0

Node.jsと Express を使用して Web チャット アプリケーションを作成しています。ルーティングについて質問があります。

私のルートは次のとおりです。

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 を持つことは可能ですか。

ええ、エクスプレスはあなたがリストしたルートを正確にサポートしています。ドキュメントでは、これを「名前のないワイルドカード」と呼んでいます。

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

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

ただし、あなたの例では、Express/Connect には、ベース ディレクトリへの URL パスを組み合わせてファイルを提供するためのstatic()ミドルウェアが含まれています。

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) からチャットにアクセスできます。

于 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 に答える