我试图在this video的帮助下理解Meteor.publish()
和Meteor.subscribe()
。
我有一个像这样定义的集合:
export const Chansons = new Mongo.Collection('chansons');
我在服务器上发布的内容:
Meteor.publish("chansons", function(){
return Chansons.find();
});
但是当我尝试在我的客户端订阅它时,我有一个错误:
为web.browser构建时:
imports/ui/body.js:17:14: Unexpected token, expected ";" (17:14)
我没有得到的是我完全像在视频中编写的代码,它最初起作用了!
constructor() {
super();
this.state = {
subscription: {
chansons: Meteor.subscribe("chansons")
}
}
}
然后我在其他地方更改了我的代码的格式,现在出现了这个错误,我似乎无法修复它。
错误似乎来自constructor()
,因为当我删除这段代码时它就会消失。
我知道这个问题真的很愚蠢,但我不知道如何解决这个问题。
编辑:这是整个body.js
:
//Importation des méthodes
import { Template } from 'meteor/templating';
import { Meteor } from 'meteor/meteor';
import { Chansons } from '../api/chansons.js'
//Importation de body
import './body.html';
//Importation des templates
import './templates/header.html';
import './templates/youTube.html';
import './templates/search.html';
import './templates/parametres.html';
import './templates/affichagePlaylist.html';
//Subscription à la collection de chansons
constructor() {
super();
this.state = {
subscription: {
chansons: Meteor.subscribe("chansons")
}
}
}
//Lancement de YouTube
if (Meteor.isClient) {
onYouTubeIframeAPIReady = function() {
player = new YT.Player("player", {
//height: "400",
//width: "600",
videoId: "fkk1vg0nAfc",
events: {
onReady: function (event) {
event.target.playVideo();
}
}
});
};
YT.load();
};
Template.body.helpers({
chansons(){
return Chansons.find({})
}
});
Template.search.events({
'click #Ajouter' : function(){
const vidURL = document.getElementById("URL").value;
Chansons.insert({
URL : vidURL
});
const URLs = Chansons.find({},{ fields: { URL: 1, _id: 0 } }).map((chanson) => chanson.URL);
console.log(URLs);
}
});

答案 0 :(得分:2)
您在constructor() {}
声明之外使用class
的声明语法无效。
只能在ES6中的对象(或类)范围内使用短语法版本声明函数。它们被称为“方法”(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions)
使用Meteor的Blaze前端,你可能想在创建模板实例时订阅,即:
Template.body.onCreated(function () {
this.subscribe("chansons"); // Similar to Meteor.subscribe, but scoped to the template instance.
});