У меня есть файл правил Firebase в app/functions/index.js, и я пытаюсь развернуть правила базы данных с помощью этой базы данных Commandbase для развертывания --only, но когда я запускаю эту команду, она дает эту ошибку. Ошибка: Ошибка загрузки firebase.json:
Ошибка Parse: функции /index.js не поддерживают тип файла конфигурации
Это мой файл firebase.json, который создается, когда я запускал команду init firebase
{
"database": {
"rules": "functions/index.js"
}
}
и это мой файл index.js
приложение /index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
var count = 1;
exports.createNewUser = functions.auth.user().onCreate(event => {
const user = event.data; // The Firebase user.
const email = user.email || ''; // The email of the user.
const displayName = user.displayName || '';
const uid = user.uid || 'usersomething';
const photo = user.photoUrl || '';
console.log("the user" + uid);
// The display name of the user.
const userRef = admin.database().ref('/users');
userRef.child('${uid}').update({
'email':email,
'photo':photo
});
var date = new Date();
var start_time = date.getTime();
});
exports.createEpisode = functions.database.ref('/users/{userId}/counsellor')
.onWrite(event => {
var uid = event.params.userId;
const isACounsellor = event.data.val();
if(isACounsellor == false){
var episodeRef = admin.database().ref('/episodes');
// create an episode for the user
var newData = episodeRef.push();
var date = new Date();
var start_time = date.getTime();
var episodeId = newData.key;
newData.set(
{
'user':uid,
'goal':'',
'problem':'Anxiety',
'triggers':'',
'counsellor_uid':'',
'payment_id':'',
'pay':'',
'conversation_id':'',
'start_time':start_time,
'rating':'',
'review':'',
'paid':false,
'live_sessions':'1'
}
);
var conversation = admin.database().ref('/conversation');
// create a conversation
var x = conversation.push();
x.set(
{
'start_time':start_time,
'end_time':''
}
);
var y = x.child('messages').push().set({
'message':"hey there!",
'sender':'',
'receive':uid,
'timewrite':start_time
});
conversation.limitToLast(1).once('child_added',function(childSnapshot){
var episodeReference = admin.database().ref('/episodes');
var conversation_identifier = conversation.key | 'xyxy';
episodeReference.child(episodeId).child('conversation_id').set(childSnapshot.key);
});
var userRef = admin.database().ref('/users');
userRef.child(uid).child('episodes').child('0').set(episodeId);
}
});
exports.setTimeAndCounsellor = functions.database.ref('/episodes/{epId}/paid')
.onWrite(event => {
// Grab the current value of what was written to the Realtime Database.
const original_value = event.data.val();
if(original_value == true){
var conversation = admin.database().ref('/conversation');
var date = new Date();
var start_time = date.getTime();
var episodeReference = admin.database().ref('/episodes');
var push_id = event.params.epId;
episodeReference.child(push_id).once('value', function(snapshot){
var type = snapshot.child('pay').val() | '';
var conversation_id = snapshot.child('conversation_id').val();
var d = new Date();
if(type == 1){
d.setMinutes(d.getMinutes() + 1);
}
if(type == 2){
d.setMinutes(d.getMinutes() + 2);
}
if(type == 3){
d.setMinutes(d.getMinutes() + 3);
}
conversation.child(conversation_id).child('end_time').set(d.getTime());
});
episodeReference.on('child_added',function(childSnapshot){
var userEpisodeKey = childSnapshot.key;
var anEpisode = childSnapshot.val();
var userOfEpisode = anEpisode['user'];
if(count % 2 != 0){
var counsellor_id = 'sqHdZojaTUTe26YtHTjQl32PPsq1';
episodes.child(userEpisodeKey).child('counsellor_uid').set(counsellor_id);
}else {
var counsellor_id = 'KyruKVVpNsVZl5jByhCYXyLtcwK2';
episodes.child(userEpisodeKey).child('counsellor_uid').set(counsellor_id);
}
});
}
});
exports.addToConversation = functions.database.ref('episodes/{epId}/counsellor_uid')
.onWrite(event => {
const convo = admin.database().ref('/conversation');
const episodes = admin.database().ref('/episodes');
const cid = event.data.val();
const epId = event.params.epId;
episodes.child(epId).child('conversation_id').once("value",function(dataSnapshot){
const convoId = dataSnapshot.val();
if(convoId !== ''){
convo.child(convoId).child('messages').limitToFirst(1).once("child_added",function(dataSnapshot){
const messageId = dataSnapshot.key;
convo.child(convoId).child('messages').child(messageId).child('sender').set(cid);
});
}
});
}
);
exports.notifyCounsellor = functions.database.ref('/episodes/{episodeId}/counsellor_uid')
.onWrite(event =>{
const value = event.data.val();
var user_col = admin.database().ref('/users');
user_col.child(value).child('episodes').child('0').set(episodeId);
}
);
Кажется, вы смешиваете два типа файлов, которые вы можете отправить серверам Firebase с помощью CLI:
Правила безопасности базы данных Firebase определяют, как сам сервер базы данных гарантирует, что все операции чтения/записи действительны и авторизованы. Он настраивается через файл JSON, обычно называемый rules.json
или database-rules.json
. Формат этих правил безопасности описан здесь.
Облачные функции для Firebase - это функции JavaScript, которые запускаются на серверах Google в ответ на события, которые происходят в вашем проекте Firebase. Код обычно находится в файле index.js
. Функции описаны здесь.
Вы сообщаете CLI Firebase развернуть правила безопасности базы данных (вариант 1 выше), но передаете ему файл, который определяет облачные функции (вариант 2 выше). Поскольку functions/index.js
не являются допустимым файлом JSON, инструмент не может его развернуть.
Первое, что нужно сделать, - это удалить это ошибочное определение rules
из вашего firebase.json
:
{
"database": {
"rules": "database-rules.js"
}
}
Если вы пытаетесь развернуть только облачные функции вашего проекта, используйте функции firebase deploy --only functions
.
Если вы пытаетесь развернуть свои правила безопасности базы данных, убедитесь, что у вас есть действующая database-rules.json
и запустите firebase deploy --only database
.
Обратитесь к разделу " Развертывание " документации CLI Firebase, а также к Firebase Web Codelab для примера того, как форматируются правила. Файл firebase.json указывает:
{
"database": {
"rules": "database-rules.json"
},
...
}
В этом же каталоге есть файл database-rules.json, который содержит конфигурацию правил, которая загружается.
Я не уверен на 100%, но, скорее всего, файл конфигурации правил должен быть в формате JSON на основе полученного вами сообщения об ошибке: Parse Error: functions/index.js is not of a supported config file type
.