如何在不使用POST请求的情况下在服务器端访问Node.js + Expressjs中静态文件中的变量/方法?

问题描述

更具体地说,我在“ public”(静态文件夹)文件夹中的.js文件中初始化并处理了一个Blob。由于已经在客户端进行了处理,因此我想知道是否有一种方法可以以某种方式无需使用POST请求就可以在服务器端访问Blob。我们正在讨论的文件已处理并存储在静态文件(script.js)中的变量中,现在我需要将该变量/ blob上传数据库中。但是,在静态文件中,我无权访问数据库,甚至无法将变量导出到服务器。如何访问静态文件中的该变量?如果有人了解我的要求,请编辑。

我的程序要做的是它通过客户端的麦克风录制音频,并且该音频文件必须上载到数据库。现在,我可以为客户端添加“下载”功能,并让客户端下载文件,然后客户端使用<input>标签将POST请求发送到服务器,但是,现在客户端可以上传任何音频文件输入到输入标签中,基本上,这是一个用于实时监控学生写作考试的Web应用程序,这样他们就不会作弊,我会捕获音频并将其保存到数据库中。请参阅我的文件夹结构以获取更多详细信息,然后再次阅读问题。

我的文件夹结构:

   --DBmodels
       ---AudioModels.js
       ---ImageModel.js
   --node_modules
   --public
       ---scipt.js (This contains the code for audio processing)
   --views
       ---test.ejs (Main HTML page)
   --index.js (server file)
   --package.json

以下是一个小图供参考: Diagram

这是我的文件夹结构: Folder Structure

一种方法是在客户端下载它,然后要求客户端上传,但是由于某些原因,这对我不起作用。

这是我的script.js,但是我无法访问服务器上的变量chunk_audio[]

   const chunks_audio = [];

    mediaRecorder.onstop = async function (e) {
        console.log("DONE WITH AUdio");
        const blob = new Blob(chunks_audio,{
            'type': "audio/ogg codecs=opus"
        });
        const audioURL = window.URL.createObjectURL(blob);
        console.log(audioURL);
        var link = document.getElementById("downloadaudio");
        link.href = audioURL;
        var audioMIMEtypes = ["audio/aac","audio/mpeg","audio/ogg","audio/opus","audio/wav"]

        const audio = blob
        const audiodb = new AudioSchema({
            name : "Audio"+Date.Now().toString()[5]
        });
        saveAudio(audiodb,audio)
        try{
            const new_audio = await audiodb.save();
            console.log("AUdio UPLOADED" + new_audio);
        }catch (err){
          console.log(err);    
        }
        function saveAudio(audiodb,audioEncoded) {
            if (audioEncoded == null) return;
            console.log("before parse: " + audioEncoded);
            const audio = JSON.parse(audioEncoded);
            console.log("JSON parse: " + audio);
            if (audio != null && audioMIMEtypes.includes(audio.type)) {
                audiodb.audio = new Buffer.from(audio.data,"base64");
                audiodb.audioType = audio.type;
            }
        }

// module.exports = chunks_audio; (This doesn't work for obvIoUs reasons)

这是我的服务器文件(index.js),我尝试使用POST请求,其中用户在下载音频文件后发布了音频文件,但是用户可以在<input>标记中发布任何其他文件,因此与我的要求不符:

  var audioMIMEtypes = ["audio/aac","audio/wav"]

  app.post('/',async ( req,res,next)=>{

        const audio = blob   // 'blob' is a variable in script.js,Hence don't have access here 
        const audiodb = new AudioSchema({
            name : "Audio"+Date.Now().toString()[5]
        });
        saveAudio(audiodb,"base64");
                audiodb.audioType = audio.type;
            }
        }
  })



解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)