定义节点 js 的模式路由
Define pattern route for node js
我正在使用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聊天。可在所有页面中访问。
提前致谢
是否可以拥有这样的模式 URL:
是的,快递完全支持您列出的路线。文档将其称为">未命名的通配符"。
// GET /foo -> (200) "foo"
// GET /baz/qux -> (200) "baz/qux"
app.get('/*', function (req, res) {
res.send(req.params[0]);
});
但是,对于您的示例,Express/Connect 包含一个static()
中间件,用于通过将 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
(,您可以访问聊天。
你可能想要使用这样的url参数:
app.get("/:chatter",function(req,res){
console.log("the chatter is",req.param('chatter'));
res.sendfile( __dirname + "/index.html" );
...
});
相关文章:
- AngularJS ui路由器html5模式中断路由
- 使用ember模式对话框的ember中的可路由模式
- 如何在 ember.js 中的模式对话框中打开路由
- 无法将引导模式窗口作为路由打开
- 在引导模式窗口内路由
- 使用中介pub/sub模式时路由骨干应用程序
- React路由器仅模式路由
- 启用了html5模式的Angular和Express路由
- 如何使用路由提供程序在应用中调用模式服务
- 定义节点 js 的模式路由
- AngularJS,HTML5模式路由不起作用
- AngularJS 路由模式
- AngularJS:can't使用ui路由$state获取html5模式url
- 在本地基于文件的应用程序中(使用file://),是否可以使用AngularJS进行HTML5模式URL路由
- Angular:如何处理HTML5模式路由和哈希路由
- Hapijs路由注册模式
- 默认情况下,在方向的旅行模式下路由不激活
- Angular html5模式下深度路由的回退不起作用
- Angular HTML5模式路由会导致无法找到资源
- jQuery模式:指向特定模式(路由)的URL