Javascript 无法通过Firebase CLI部署Firebase规则

Javascript 无法通过Firebase CLI部署Firebase规则,javascript,android,json,firebase,firebase-realtime-database,Javascript,Android,Json,Firebase,Firebase Realtime Database,我在app/functions/index.js 我正试图通过以下命令部署数据库规则:firebase deploy--only database,但当我运行此命令时,会出现以下错误: 错误:加载firebase.json时出错: 分析错误:functions/index.js不是受支持的配置文件类型 这是我在运行firebase init命令时创建的firebase.json文件 { "database": { "rules": "

我在
app/functions/index.js
我正试图通过以下命令部署数据库规则:
firebase deploy--only database
,但当我运行此命令时,会出现以下错误:

错误:加载firebase.json时出错:

分析错误:functions/index.js不是受支持的配置文件类型

这是我在运行firebase init命令时创建的firebase.json文件

{
  "database": {
    "rules": "functions/index.js"
  }
}
这是我的index.js文件

app/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文档的一节以及。该文件指定:

{
  "database": {
    "rules": "database-rules.json"
  },
  ...
}
在同一个目录中,有一个包含上载的规则配置的文件


我不是100%确定,但根据您收到的错误消息,规则配置文件很可能必须是JSON格式:
Parse error:functions/index.js不是受支持的配置文件类型

您似乎混淆了两种可以用CLI发送到Firebase服务器的文件类型:

  • Firebase数据库安全规则定义了数据库服务器本身如何确保所有读/写操作有效且经过授权。它是通过JSON文件配置的,通常称为
    rules.JSON
    database rules.JSON
    。这个

  • Firebase的云函数是在Google服务器上运行的JavaScript函数,用于响应Firebase项目中发生的事件。代码通常位于名为
    index.js
    的文件中

  • 您正在告诉Firebase CLI部署数据库安全规则(上面的选项1),但正在向其传递一个定义云功能的文件(上面的选项2)。由于
    functions/index.js
    不是有效的JSON文件,因此工具无法部署它

    首先要做的是从您的
    firebase.json
    中删除错误的
    规则定义:

    {
      "database": {
        "rules": "database-rules.js"
      }
    }
    
    如果您试图仅部署项目的云功能,请使用
    firebase deploy--only Functions

    如果您试图部署数据库安全规则,请确保您拥有有效的
    数据库规则.json
    并运行
    firebase deploy--only database