Javascript 如何在Node.js/EJS中单击按钮时触发Firebase POST请求
编辑: 其实还有一些问题。真正的问题实际上是Firebase安全规则。所有问题都在这里解决了: 问题: 单击“UpvoteButton”或“DownvoteButton”时如何触发Firebase POST请求Javascript 如何在Node.js/EJS中单击按钮时触发Firebase POST请求,javascript,jquery,firebase,firebase-realtime-database,Javascript,Jquery,Firebase,Firebase Realtime Database,编辑: 其实还有一些问题。真正的问题实际上是Firebase安全规则。所有问题都在这里解决了: 问题: 单击“UpvoteButton”或“DownvoteButton”时如何触发Firebase POST请求 我的尝试: 更新4: 我想我正在进步。在下面找到更新的代码。现在我得到一个错误: SyntaxError: Unexpected token ; in ... while compiling ejs 代码: "> 惠普 $('.UpvoteButton')。单击(函数(){ win
我的尝试: 更新4: 我想我正在进步。在下面找到更新的代码。现在我得到一个错误:
SyntaxError: Unexpected token ; in ... while compiling ejs
代码:
">
惠普
$('.UpvoteButton')。单击(函数(){
window.location.href=“/users/login”;
var$this=$(this);
变量$other=$('.DownvoteButton');
如果($this.hasClass(“on”)){
$this.removeClass(“on”);
}else if(!$this.hasClass('on')&&$other.hasClass('on')){
$this.addClass('on');
$other.removeClass(“on”);
}否则{
$this.addClass('on');
}
});
$('.DownvoteButton')。单击(函数(){
window.location.href=“/users/login”;
var$this=$(this);
变量$other=$('.UpvoteButton');
如果($this.hasClass(“on”)){
$this.removeClass(“on”);
}else if(!$this.hasClass('on')&&$other.hasClass('on')){
$this.addClass('on');
$other.removeClass(“on”);
}否则{
$this.addClass('on');
}
});
您必须通过调用firebase.initializeApp(…)来初始化firebase
就像firebase指南告诉我们的那样:
`
//TODO:替换为项目的自定义代码段
//初始化Firebase
变量配置={
apiKey:“”,
身份验证域:“”,
数据库URL:“”,
storageBucket:“”
};
firebase.initializeApp(配置);
`
解决方案是在
标记之间保留所有纯javascript代码,并在我的ejs文件中初始化firebase
问题其实与Firebase安全规则有关
请在此处找到详细答案:
代码:
//初始化Firebase
//TODO:替换为项目的自定义代码段
变量配置={
apiKey:“信息”,
authDomain:“信息”,
数据库URL:“信息”,
storageBucket:“信息”,
messagingSenderId:“信息”
};
firebase.initializeApp(配置);
">
惠普
var upvotesRef=firebase.database().ref(“posts/fun//upvots”);
var downvotesRef=firebase.database().ref(“posts/fun//downvots”);
$('.UpvoteButton')。单击(函数(){
upvotesRef.transaction(函数(upvotes){
如果(!upvoces){
向上投票=0;
}
上升票数=上升票数-1;
重新投票;
});
});
您是否尝试使用firebase浏览器sdk?它将在没有显式http请求的情况下保存您的数据@VladimirGabrielyan这就是我正在使用的(我想)。我不确定我是否理解你的意思:)说触发Firebase Post请求你的意思是保存或更新数据库中的某些内容?我的意思是保存和更新。将新数据设置为所需路径。好的,然后使用firebase sdk执行所有操作,使用上面提到的链接。使用firebase sdk,您可以对firebase数据库执行所有操作(创建、读取、更新和删除)不,没有更改任何内容。无论如何,要两次初始化firebase都会很奇怪,但thx试图提供帮助:)有一个投票权。
<% include ../partials/header %>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.0/firebase.js"></script>
<script>
<% var config = { %>
<% apiKey: "info", %>
<% authDomain: "info", %>
<% databaseURL: "info", %>
<% storageBucket: "info", %>
<% messagingSenderId: "info" %>
<% }; %>
<% firebase.initializeApp(config); %>
</script>
<div class ="containerMarginsDetails">
<h1 class= "detailsTitle"><%=post.title %></h1>
<div class="row">
<img class = "postImg" src="/images/uploads/<%= post.image %>">
<span class="UpvoteButton"> </span><span class="DownvoteButton"> </span> <span class="HP"><%= post.upvotes - post.downvotes%> HP</span>
</div>
</div>
<script>
<% var upvotesRef = firebase.database().ref("posts/section/"+id+"/upvotes"); %>
<% var downvotesRef = firebase.database().ref("posts/section/"+id+"/downvotes"); %>
$('.UpvoteButton').click(function () {
<% if(authdata == null) { %>
window.location.href = "/users/login";
<% } else { %>
var $this = $(this);
var $other = $('.DownvoteButton');
if ($this.hasClass("on")) {
$this.removeClass("on");
<% upvotesRef.transaction(function (upvotes) { %>
<% if (!upvotes) { %>
<% upvotes = 0; %>
<% } %>
<% upvotes = upvotes - 1; %>
<% return upvotes; %>
<% }); %>
} else if (!$this.hasClass('on') && $other.hasClass("on")) {
$this.addClass('on');
$other.removeClass("on");
<% upvotesRef.transaction(function (upvotes) { %>
<% if (!upvotes) { %>
<% upvotes = 0; %>
<% } %>
<% upvotes = upvotes + 1; %>
<% return upvotes; %>
<% }); %>
<% downvotesRef.transaction(function (downvotes) { %>
<% if (!upvotes) { %>
<% downvotes = 0; %>
<% } %>
<% downvotes = downvotes - 1; %>
<% return downvotes; %>
<% }); %>
} else {
$this.addClass('on');
<% upvotesRef.transaction(function (upvotes) { %>
<% if (!upvotes) { %>
<% upvotes = 0; %>
<% } %>
<% upvotes = upvotes + 1; %>
<% return upvotes; %>
<% }); %>
}
<% } %>
});
$('.DownvoteButton').click(function () {
<% if(authdata == null) { %>
window.location.href = "/users/login";
<% } else { %>
var $this = $(this);
var $other = $('.UpvoteButton');
if ($this.hasClass("on")) {
$this.removeClass("on");
} else if (!$this.hasClass('on') && $other.hasClass("on")) {
$this.addClass('on');
$other.removeClass("on");
} else {
$this.addClass('on');
}
<% } %>
});
</script>
<% include ../partials/footer %>
// TODO: Replace with your project's customized code snippet
<script src="https://www.gstatic.com/firebasejs/3.4.0/firebase.js"></script>
<script>
// Initialize Firebase
var config = {
apiKey: '<your-api-key>',
authDomain: '<your-auth-domain>',
databaseURL: '<your-database-url>',
storageBucket: '<your-storage-bucket>'
};
firebase.initializeApp(config);
</script>`
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.0/firebase.js"></script>
<script>
// Initialize Firebase
// TODO: Replace with your project's customized code snippet
var config = {
apiKey: "info",
authDomain: "info",
databaseURL: "info",
storageBucket: "info",
messagingSenderId: "info"
};
firebase.initializeApp(config);
</script>
<div class ="containerMarginsDetails">
<h1 class= "detailsTitle"><%=post.title %></h1>
<div class="row">
<img class = "postImg" src="/images/uploads/<%= post.image %>">
<span class="UpvoteButton"> </span><span class="DownvoteButton"> </span> <span class="HP"><%= post.upvotes - post.downvotes%> HP</span>
</div>
</div>
<script>
var upvotesRef = firebase.database().ref("posts/fun/<%=id%>/upvotes");
var downvotesRef = firebase.database().ref("posts/fun/<%=id%>/downvotes");
$('.UpvoteButton').click(function () {
upvotesRef.transaction(function (upvotes) {
if (!upvotes) {
upvotes = 0;
}
upvotes = upvotes - 1;
return upvotes;
});
});
</script>