为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

噜噜哒 2022-08-27 15:12:35
在我的客户端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
查看完整描述

3 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

我解决了这个问题。我需要使用:

 res.setHeader("Content-Type", "text/javascript"); //Solution!
    res.writeHead(200);
    res.end(data);

而且它工作正常。


查看完整回答
反对 回复 2022-08-27
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

试试这个


res.type('.js');

res.send(data);


查看完整回答
反对 回复 2022-08-27
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您需要告诉浏览器发生了错误,以便它不会尝试将响应解析为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);

    }

  });

});


查看完整回答
反对 回复 2022-08-27
  • 3 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信