web-dev-qa-db-ja.com

Nodeサーバー:MIMEタイプ(「text / html」)が​​許可されていないため、ロードモジュールがブロックされました

非常に単純なアプリケーションでローカルノードサーバーを実行しようとすると、次のエラーメッセージが表示されます(以下のコーディングを参照)。

http:// localhost:8080/importing.js 」からのロードモジュールは、MIMEタイプ(「text/html」)が​​許可されていないためブロックされました。

ノードとES6モジュールは初めてなので、問題の詳細がよくわかりません。これによると [〜#〜] url [〜#〜] MIMEタイプ 'application/javascript'はモジュールに対して明示的に提供する必要があります。しかし、以下の私の例ではこれをどのように達成しますか?

index.html

<!DOCTYPE html>
<html>
  <head>
    <script src="./importing.js" type="module"></script>
    <meta charset="utf-8">
  </head>
  <body>
  </body>
</html>

server.js

var http = require('http');
var fs = require('fs');

const PORT=8080;

fs.readFile('./index.html', function (err, html) {

    if (err) throw err;

    http.createServer(function(request, response) {
        response.writeHeader(200, {"Content-Type": "text/html"});
        response.write(html);
        response.end();
    }).listen(PORT);
});

importing.js

import {a} from './exporting.js';

console.log(a);

exporting.js

export const a = 'Constant a';

私はCMDでサーバーを起動します

node server.js
2
Peter Petrus

コマンドだけをインポートしていることはわかっていますが、これに対する私の解決策を知らせて、興味があるかどうかを確認します。このエラーは、私にとって、モジュールのimportステートメントから発生しました。基本的に同じサーバーとHTMLを使用しながら、ファイル全体をインポートしようとしましたが、すべての機能とインポートがありました。

私のimporting.js

import * as Spotify from "./spotify-web-api.js";

window.basicAlert = function basicAlert() {
    alert("this is a test to see if basicAlert runs properly");
}

console.log("Should print to console with no error on imports");

import * asの背後にあるロジックはわかりませんが、MIMEタイプのエラーをスローせずにファイルを正常にインポートすることができました。 window.basicAlert =に関しては、Javascriptは、手動でウィンドウにアタッチされていない限り、関数や変数へのアクセスをインポートするファイルを提供したくないようです。現在、このエラーは発生していませんが、ファイルが正常にインポートされると、aが定義されていないことが示されます。 importing.jsで関数にアタッチしていますが、exporting.jsに次のように配置する必要があります。

const a = 'Constant a';
windows.a = a;

私はそれをテストしませんでした^が、私には理にかなっています。これがあなたを助けたり、もっと近づいたりして私の問題が解決したことを願っています。

0
Rhett Jarvis