NodeJS 如何修复MIME类型“text/html”?

y1aodyip  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(254)

我想通过HTML和JS制作docx文件,但我得到下一个错误:
无法加载模块脚本:应为JavaScript模块脚本,但服务器响应的MIME类型为“text/html”。根据HTML规范,对模块脚本强制执行严格的MIME类型检查。
我使用下一个html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=chrome">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <nav></nav>
    <section>
        <button>
            <input type="file" id="input">
            <button style="display: block; margin-top: 5em;" id="generate">Create custom DOCX type from XL document</button>
        </button>
    </section>
    <footer></footer>
    <script type="module" src="js/script.js"></script>
</body>
</html>

js:

import { Document, Packer } from "../node_modules/docx/build/index"
import { saveAs } from "../node_modules/file-saver/dist/FileSaver"

document.getElementById("generate").addEventListener(
    "click",
    function (event) {
        generateWordDocument(event)
    },
    false
)
function generateWordDocument(event) {
    event.preventDefault()
    // Create a new instance of Document for the docx module
    let doc = new Document()
    // Call saveDocumentToFile with the document instance and a filename
    saveDocumentToFile(doc, "New Document.docx")
}
function saveDocumentToFile(doc, fileName) {
    // Create new instance of Packer for the docx module
    const packer = new Packer()
    // Create a mime type that will associate the new file with Microsoft Word
    const mimeType =
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
    // Create a Blob containing the Document instance and the mimeType
    packer.toBlob(doc).then(blob => {
        const docblob = blob.slice(0, blob.size, mimeType)
        // Save the file using saveAs from the file-saver package
        saveAs(docblob, fileName)
    })
}

const inputElement = document.getElementById("input");
inputElement.addEventListener("change", handleFiles, false);
let fileList = inputElement.files
function handleFiles() {
    fileList = this.files; /* now you can work with the file list */
    console.log(fileList[0].name)
}

我下载docx和文件保存程序下一个方式:
npm install docx
npm install file-saver
关于http-server
我正在使用http-server来测试我的代码
http-server -c-1
如何修复此代码中text/html MIME类型?
我试图改变路径到docx和文件保护程序一样“../package.json/docx”“docx”../node_modules/docx”等,但它不工作,我也试图使用另一个服务器作为http服务器和活服务器在vscode,但没有什么是wornking

fhity93d

fhity93d1#

这个错误与你的DOCX无关。它抱怨在请求模块时得到的js/script.js响应的MIME类型。显然,http-server返回text/html作为内容类型,这是不允许的;它必须是一个有效的JavaScript MIME类型(例如text/javascript,尽管application/javascript和其他一些类型也可以)。
The http-server documentation说明你可以传递--mimetypes来指定一个包含要使用的MIME类型的.types文件,告诉它使用text/javascript作为MIME类型(可能使用charset),尽管它没有告诉你该文件应该是什么格式(你可能可以从源代码中找到它)。或者,您可以考虑使用另一个服务器来自动处理此问题。

相关问题