我正在使用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 + "/*" );
});
这样任何用户都可以访问任何URL上的聊天
简而言之:类似于Facebook聊天。在所有页面中都可以访问。
提前致谢
最佳答案
是否可以使用如下格式的网址:
是的,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聊天之类的东西。在所有页面中都可以访问。
这不一定与路由有很大关系。您的应用程序可能需要一种路由来收集联系人或其他持久数据的列表,但是实际的“聊天”将单独进行管理。
通常,这取决于在每个页面中包含公共内容(如果使用的是视图/模板,则可能通过“布局”或“继承”)来显示用于输入消息的表单以及用于显示聊天记录的区域。同样,聊天的相当数量的“工作”必须在客户端完成。
一个简单的例子是为多个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
)访问聊天。关于javascript - 为 Node js定义模式路由,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19301483/