我正在使用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聊天。在所有页面中都可以访问。
提前感谢
发布于 2013-10-10 19:13:02
是否可能有这样的模式URL:
是的,Express完全支持你列出的路线。文档将其称为“未命名的通配符”。
// GET /foo -> (200) "foo"
// GET /baz/qux -> (200) "baz/qux"
app.get('/*', function (req, res) {
res.send(req.params[0]);
});但是,对于您的示例,Express/Connect包含一个中间件,用于通过将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)访问聊天。
发布于 2013-10-10 16:41:45
您可能会想使用这样的url参数:
app.get("/:chatter",function(req,res){
console.log("the chatter is",req.param('chatter'));
res.sendfile( __dirname + "/index.html" );
...
});https://stackoverflow.com/questions/19301483
复制相似问题