Express 在获得授权的情况下提供 javascipt 文件

在我的客户端javascript中,如果用户获得授权(使用firebase身份验证),我会请求私有内容,如下所示:


firebase.auth().onAuthStateChanged(user => {

  if (!user) {

    ui.start("#firebaseui-auth-container", uiConfig);

  }

  if (user) {

    import("/private.js").then(module => {

      console.log(module.default);

    });

  }

});

所有用户都通过托管网址的公共 firebase 提供服务,但只有当用户获得授权时,他们才会请求私有内容。我的重定向来处理这个问题:index.htmlfirebase.json


 "rewrites": [

      {

        "source": "**",

        "function": "app"

      }

    ]

我正在努力建立一个基于firebase函数的express后端来为javascript服务。(我还没有添加身份验证检查,因为我想让它工作,只是先为js服务)。

我的 firebase 函数如下所示:


const fs = require("fs");

const functions = require("firebase-functions");

const express = require("express");

const app = express();


app.get("/private.js", (req, res) => {

  fs.readFile("private.js", "utf8", function (err, data) {

    if (err) throw err;

    res.send(data)

  });


});

exports.app = functions.https.onRequest(app);

但是,当用户获得授权并且客户端尝试动态导入时,我收到以下错误:。如何正确设置MIME类型以提供js文件?private.jsFailed to load module script: The server responded with a non-JavaScript MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec


噜噜哒
浏览 94回答 3
3回答

30秒到达战场

我解决了这个问题。我需要使用: res.setHeader("Content-Type", "text/javascript"); //Solution!     res.writeHead(200);     res.end(data);而且它工作正常。

慕无忌1623718

试试这个res.type('.js');res.send(data);

一只甜甜圈

您需要告诉浏览器发生了错误,以便它不会尝试将响应解析为JavaScript。您可以通过发送以 4(客户端错误)或 5(服务器错误)开头的状态代码来执行此操作。下面是一个示例:app.get("/private.js", (req, res) => {  fs.readFile("private.js", "utf8", function (err, data) {    if (err) {      res.status(403).send('Could not load the data.');    } else {      res.send(data);    }  });});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript