我看到了什么:
感想:
我目前在本地存储图像并将图像路径存储在Firebase实时数据库中.我想将图像存储在GCloud中(以降低成本).
题:
我应该如何修改我的当前代码以上传到GCLOUD?
当前代码:
var express = require("express");
var router = express.Router();
var flash = require("connect-flash");
var firebase = require("firebase");
var multer = require("multer");
var upload = multer({dest:"./public/images/uploads/", limits: {fileSize: 250000}}).single("image");
router.get("/", function(req, res, next){
if (firebase.auth().currentUser == null) {
global.page_name = "login";
res.render("users/login");
}
else {
global.page_name = "upload";
res.render("upload");
}
});
router.post("/", function(req, res, next){
upload(req,res, function (err) {
if (err) {
req.flash("error_msg", "File too large. Max Size: 250KB");
res.redirect("/upload");
return
} …Run Code Online (Sandbox Code Playgroud) 情况:
我需要下载childNode,然后将()设置为另一个节点.
问题是我想在childNode的得分属性达到100时才这样做.
我应该在何时何地检查帖子的分数是否为100或更高,以及如何仅将其复制到新索引一次?
我的想法是什么:
加载帖子后,检查其分数.如果> = 100,请检查数据库是否属于这种情况.然后将节点推送到新索引.
问题:
每次加载帖子时,如何阻止节点上传,因为多次加载时得分> = 100?我需要它只发生一次!
解决方案代码:
if (funPost.score >= global.hotNumber && funPost.hot == false) {
var hotPostRef = firebase.database().ref("hot/section/"+key);
var hotPost = {
title: funPost.title,
image: funPost.image,
id: funPost.id,
key: funPost.key
}
hotPostRef.set(hotPost);
funPostRef.update({"hot": true});
}
else if (funPost.score <= (global.hotNumber - 25) && funPost.hot == true) {
var hotPostRef = firebase.database().ref("hot/section/"+key);
hotPostRef.remove();
funPostRef.update({"hot": false});
}
Run Code Online (Sandbox Code Playgroud)
解决方案:我最终使用了布尔标志.
更新8:
码:
<% include ../partials/header %>
<script src="https://www.gstatic.com/firebasejs/3.5.2/firebase.js"></script>
<script src="https://cdn.firebase.com/libs/firebase-util/0.2.5/firebase-util.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/1.1.4/angularfire.min.js"></script>
<script>
var config = {
info
};
firebase.initializeApp(config);
var fb = firebase.database().ref("posts/fun");
var app = angular.module('app', ['firebase']);
app.controller('ctrl', function ($scope, $firebaseArray, $timeout) {
$scope.data = [];
var _start = 0;
var _end = 4;
var _n = 5;
$scope.getDataset = function() {
fb.orderByChild('id').startAt(_start).endAt(_end).limitToLast(_n).on("child_added", function(dataSnapshot) {
$scope.data.push(dataSnapshot.val());
console.log("THE VALUE:"+$scope.data);
});
_start = _start + _n;
_end = _end + _n;
};
$scope.getDataset()
});
// Compile the whole …Run Code Online (Sandbox Code Playgroud) javascript node.js angularjs firebase firebase-realtime-database
题:
如何使用javascript(和node.js)在Firebase中实现高效的无限滚动?
我检查了什么:
问题:老火山^
代码来自: 使用AngularJs和Firebase进行无限滚动
"首先,我建议在你的Firebase中创建一个索引.对于这个答案,我创建了这个:
{
"rules": {
".read": true,
".write": false,
"messages": {
".indexOn": "id"
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,让我们用Firebase做一些魔术:
// @fb: your Firebase.
// @data: messages, users, products... the dataset you want to do something with.
// @_start: min ID where you want to start fetching your data.
// @_end: max ID where you want to start fetching your data.
// @_n: Step size. In other words, how much data you want to fetch from …Run Code Online (Sandbox Code Playgroud) javascript node.js infinite-scroll firebase firebase-realtime-database
我做了什么(做得不正确):
码:
<script>
var app = angular.module('app', ['firebase']);
app.controller('ctrl', function ($scope, $firebaseArray, $timeout) {
$scope.data = [];
var _n = Math.ceil(($(window).height() - 50) / (350)) + 1;
var start = 0;
var end = _n - 1;
var lastScore = <%=lastScore%>;
console.log("FIRST FIRST FIRST LAST SCORE:" + lastScore);
var firstElementsLoaded = false;
$scope.getDataset = function() {
fb.orderByChild('score').endAt(lastScore).limitToLast(_n).on("child_added", function(dataSnapshot) {
lastScore = dataSnapshot.child("score").val() - 1;
console.log("LAST TOP LIKED:"+ lastScore);
$scope.data.push(dataSnapshot.val());
$scope.$apply();
console.log("THE VALUE:"+$scope.data);
$scope.data.splice(start, end).concat($scope.data.reverse());
$scope.$apply();
start = start + _n; …Run Code Online (Sandbox Code Playgroud) 我在终端中写的像往常一样部署:
gcloud app deploy
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
Application startup error:
> meanjs@0.5.0 start /app
> gulp
sh: 1: gulp: not found
npm ERR! Linux 3.16.0-4-amd64
npm ERR! argv "/nodejs/bin/node" "/nodejs/bin/npm" "start"
npm ERR! node v6.9.5
npm ERR! npm v3.10.10
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! meanjs@0.5.0 start: `gulp`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the meanjs@0.5.0 start script 'gulp'.
npm ERR! Make sure you have the …Run Code Online (Sandbox Code Playgroud) 正如标题所说。
我到处寻找,找不到答案。
代码:
var upload = multer({dest:"./public/images/uploads/", limits: {fileSize: 250000}}).single("image");
Run Code Online (Sandbox Code Playgroud)
问题
如果我选择上传 pdf,这并不妨碍我上传 pdf。
情况:
我正在尝试向刚刚注册的用户发送验证电子邮件。
除非他验证自己的电子邮件地址,否则不会创建他的帐户。
我的代码:
var userAuth = firebase.auth().currentUser;
userAuth.sendEmailVerification().then(function() {
req.flash('success_msg', 'Please verify your email address. You have 60 seconds');
setTimeout(function(){
if(userAuth.emailVerified) {
firebase.auth().createUserWithEmailAndPassword(email, password).then(userData => {
var user = {
email: email,
username: username,
}
firebase.database().ref('users/'+userData.uid.toString()).set(user);
req.flash('success_msg', 'You have registered and logged in.');
res.redirect('...');
}).catch(error => {
var errorCode = error.code;
var errorMessage = error.message;
req.flash('error_msg', 'Registration Failed. ' + error.message);
res.redirect('/users/register');
console.log("Error creating user: ", error);
});
} else {
req.flash('error_msg', 'Registration Failed.');
res.redirect('/users/register');
}
}, 60000);
}, …Run Code Online (Sandbox Code Playgroud) 情况:
我正在尝试为这个问题实现第一个答案(有25个upvotes):我如何制作一个Upvote/Downvote按钮?使用我的Node.js ejs模板.
所以我写了这段代码.
我的代码:
Main.js
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
$('.UpvoteButton').click(function () {
$(this).toggleClass('on');
});
$('.DownvoteButton').click(function () {
$(this).toggleClass('on');
});
Run Code Online (Sandbox Code Playgroud)
style.css文件
.UpvoteButton {
display: inline-block;
overflow: hidden;
width: 80px;
height: 50px;
margin-top: 15px;
margin-right: 3px;
cursor: pointer;
background: url('/assets/UpvoteButtonSpriteSheet.png');
background-position: 0 0px;
}
.DownvoteButton {
display: inline-block;
overflow: hidden;
width: 80px;
height: 50px;
margin-top: 15px;
margin-right: 3px;
cursor: pointer;
background: url('/assets/DownvoteButtonSpriteSheet.png');
background-position: 0 0px;
}
.UpvoteButton.on {
background-position: 0 50px;
}
.DownvoteButton.on {
background-position: 0 50px;
}
Run Code Online (Sandbox Code Playgroud)
index.ejs
<% include …Run Code Online (Sandbox Code Playgroud) 情况:
目前,我将UID通过url传递给服务器.
然后,我使用UID检查数据库中是否存在该UID:
码:
router.get("/profile/:uid", function(req, res, next){
var uid = req.params.uid;
var userRef = admin.database().ref("users/"+uid);
userRef.once('value', function(snapshot){
if (snapshot != null) {
Run Code Online (Sandbox Code Playgroud)
问题:
这意味着任何人都可以通过构建网址并将其粘贴到搜索栏并包含该用户的UID来访问任何人的个人资料.
题:
如何在没有此类安全漏洞的情况下检查用户是否在服务器上进行了身份验证?
javascript node.js firebase firebase-authentication firebase-realtime-database