使用Meteor配合Node.js编写实时聊天应用的范例

2020-06-17 06:54:52易采站长站整理

由于Meteor为我们做了大部分的工作, 要展示聊天记录是非常容易的. 只需要把下面的代码添加进if语句里边.


Template.messages.messages = function(){
return Messages.find({}, { sort: { time: -1 }});
}

让我们拆开来分析这段代码:


Template.messages.messages = function(){ … }

第一部分Template表示我们正在修改一个模板的行为.


Template.messages.messages = function(){ … }

第二部分messages是模板的名字, 表示是在修改哪一个模板. 例如,如果我们想要对”entryfield”模板做些什么, 只需把代码改成


Template.entryfields.variable = function(){ … }

(在这里, 请别这么做)


Template.messages.messages = function(){ … }

第三部分的这个messages代表的是一个这个模板里的一个变量. 还记得我们的each循环遍历messages吗? 这就是那个mesaages.

当你打开浏览器时, 页面还是没有什么改变. 这是意料之中的事, 因为我们只抓取的讯息, 而没有展示出来.

此时,你的chat.js应该是这样的. 是否很惊讶就只需在服务器写这么些代码我们就能展示一个实时的聊天记录应用.


Messages = new Meteor.Collection('messages');

if (Meteor.is_client) {
Template.messages.messages = function(){
return Messages.find({}, { sort: { time: -1 }});
}
}

在console里添加Message

这部分的内容是可选的, 当然它有助于你调试程序. 你可以直接跳过往下学习建立form来响应键盘事件(key press).

如果你想要测试你的讯息显示代码, 你可以手动插入一条记录到数据库. 打开你的浏览器控制台, 并输入如下:


Messages.insert({ name: 'Andrew', message: 'Hello world!', time: 0 })

这将会在数据库中新建一条记录, 如果正确的操作了的话,那浏览器就会即刻更新这条讯息在页面上.

消息表单

回到chat.js文件当中,我们会将供输入的form和数据库链接起来以接收用户聊天数据的提交。在底部添加下面的代码,不过注意要在if语句块中。

 


Template.entryfield.events = {
"keydown #message": function(event){
if(event.which == 13){
// Submit the form
var name = document.getElementById('name');
var message = document.getElementById('message');

if(name.value != '' && message.value != ''){
Messages.insert({
name: name.value,