我正在使用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 + "/*" );
});
以便任何用户都可以访问任何网址上的聊天 简而言之:像Facebook聊天一样。可以在所有页面访问。
提前致谢
答案 0 :(得分:3)
是否可以使用这样的模式URL:
是的,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聊天的东西。可以在所有页面访问。
这不一定与路由有很大关系。您的应用程序可能需要一条路线来收集联系人列表或其他持久数据,但实际的“聊天”将单独管理。
一般情况下,如果你使用的是视图/模板,它将取决于在每个页面中包含常见内容 - 可能通过“ layout ”或“ inheritance ” - 显示输入消息的表单和显示聊天记录的区域。此外,聊天的大量“工作”必须在客户端完成。
一个简单的示例是为多个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
)访问聊天。
答案 1 :(得分:0)
你可能想要使用这样的url param:
app.get("/:chatter",function(req,res){
console.log("the chatter is",req.param('chatter'));
res.sendfile( __dirname + "/index.html" );
...
});