質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

476閲覧

ローカルサーバによってブラウザ上でファイルを読み込み可能にする

aaaa____

総合スコア29

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

1クリップ

投稿2024/01/04 11:43

編集2024/01/07 11:48

実現したいこと

fetchを使用してサーバサイドのエンドポイント/getMelodyから,melody.txtの内容を非同期で取得したいと考えております.
fetchを使用してサーバサイドのエンドポイント/docsから,melody.txtの内容を非同期で取得したいと考えております.
サーバサイドのコードをserver.jsに記述しています.
ひとまずはページ上のRunボタンを押下した際に,この取得を行い,デベロッパツールのコンソールにmelody.txtの内容を出力しようと考えております.

https://github.com/snym-yt/VisualPMusic
このリポジトリでファイル構成,およびファイルの内容が確認することが可能です.
(質問本文での情報過多を防ぐためにこのような形にさせていただいております.ご了承ください)
index.html, script.js, server.js, docs/melody.txtの4ファイルが本質問に関係していると考えております.

環境

  • MacBool Air
  • Google Chrome

現状

Console

1:8080/getMelody:1 Failed to load resource: the server responded with a status of 404 (Not Found) 2script.js:121 Melody:

bash

1VisualPMusic % http-server 2 3Starting up http-server, serving ./ 4 5http-server version: 14.1.1 6 7http-server settings: 8CORS: disabled 9Cache: 3600 seconds 10Connection Timeout: 120 seconds 11Directory Listings: visible 12AutoIndex: visible 13Serve GZIP Files: false 14Serve Brotli Files: false 15Default File Extension: none 16 17Available on: 18 http://127.0.0.1:8080 19 http://192.168.0.16:8080 20Hit CTRL-C to stop the server

このようなエラー,状態が出ております.

確認したこと/お聞きしたいこと

  • パスの確認

index.htmlから見ても,server.jsから見ても,docs/melody.txtの相対パスは問題ないと考えております.

  • エンドポイントの確認

Expressを使用して齟齬なく設定されていると考えております.

  • ローカルサーバの再起動
  • キャッシュの削除

他にどのようなことを確認すればよろしいでしょうか,
また他に効率的なファイルの読み取り方法はあったりしますでしょうか.

追記1

"/getMelody"のとき

イメージ説明

"/docs"のとき

イメージ説明
イメージ説明

追記2

express install 前

bash

1VisualPMusic % npm --version 210.1.0 3VisualPMusic % express --version 4zsh: command not found: express 5VisualPMusic % npm ls | grep express 6VisualPMusic % npm ls -g | grep express 7VisualPMusic % node server.js 8node:internal/modules/cjs/loader:1051 9 throw err; 10 ^ 11 12Error: Cannot find module 'express' 13Require stack: 14- VisualPMusic/server.js 15 at Module._resolveFilename (node:internal/modules/cjs/loader:1048:15) 16 at Module._load (node:internal/modules/cjs/loader:901:27) 17 at Module.require (node:internal/modules/cjs/loader:1115:19) 18 at require (node:internal/modules/helpers:130:18) 19 at Object.<anonymous> (VisualPMusic/server.js:1:17) 20 at Module._compile (node:internal/modules/cjs/loader:1241:14) 21 at Module._extensions..js (node:internal/modules/cjs/loader:1295:10) 22 at Module.load (node:internal/modules/cjs/loader:1091:32) 23 at Module._load (node:internal/modules/cjs/loader:938:12) 24 at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12) { 25 code: 'MODULE_NOT_FOUND', 26 requireStack: [ 'VisualPMusic/server.js' ] 27} 28 29Node.js v20.8.0
nodeのバージョン確認

bash

1VisualPMusic % Node --version 2v20.8.0
npm install express 結果

bash

1VisualPMusic % npm install express 2 3added 62 packages in 996ms 4 511 packages are looking for funding 6 run `npm fund` for details
npm init 結果

bash

1VisualPMusic % npm init 2This utility will walk you through creating a package.json file. 3It only covers the most common items, and tries to guess sensible defaults. 4 5See `npm help init` for definitive documentation on these fields 6and exactly what they do. 7 8Use `npm install <pkg>` afterwards to install a package and 9save it as a dependency in the package.json file. 10 11Press ^C at any time to quit. 12package name: (visualpmusic) 13version: (1.0.0) 14entry point: (script.js) 15git repository: 16keywords: 17author: 18license: (ISC) 19About to write to /VisualPMusic/package.json: 20 21{ 22 "dependencies": { 23 "express": "^4.18.2" 24 }, 25 "scripts": { 26 "start": "node server.js" 27 }, 28 "name": "visualpmusic", 29 "description": "## Purpose PMusicをビジュアルプログラミングにする.", 30 "version": "1.0.0", 31 "main": "script.js", 32 "directories": { 33 "doc": "docs" 34 }, 35 "devDependencies": {}, 36 "author": "", 37 "license": "ISC" 38} 39 40 41Is this OK? (yes) 42VisualPMusic % express --version 434.16.1
express install 後

bash

1VisualPMusic % express --version 24.16.1 3VisualPMusic % npm ls | grep express 4└── express@4.18.2 5VisualPMusic % npm ls -g | grep express 6├── express-generator@4.16.1 7VisualPMusic % node server.js 8Server is running on http://localhost:8080

https://kinsta.com/jp/knowledgebase/install-express/
この記事を見て,npm install -g express-generatorを行ったので-gのものも反応してしまっているかもしれません
これは不都合でしょうか?
node server.jsを行った後http-serverを実行しましたが,エラーは同じものが出力されました.
/getMelody/docs/melody.txtに変更したところ,404エラーはなくなりました.
しかし,melody.txtの中身の出力を期待しているのに対して,異なったものが出力されてしまいました.

getMelodyを変更した後のコンソール(冒頭のみ抜粋)
Melody: <!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>Index of /docs/</title> <style type="text/css">i.icon { display: block; height: 16px; width: 16px; } table tr { white-space: nowrap; } td.perms {} td.file-size { text-align: right; padding-left: 1em; } td.display-name { padding-left: 1em; } i.icon-_blank { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWBJREFUeNqEUj1LxEAQnd1MVA4lyIEWx6UIKEGUExGsbC3tLfwJ/hT/g7VlCnubqxXBwg/Q4hQP/LhKL5nZuBsvuGfW5MGyuzM7jzdvVuR5DgYnZ+f99ai7Vt5t9K9unu4HLweI3qWYxI6PDosdy0fhcntxO44CcOBzPA7mfEyuHwf7ntQk4jcnywOxIlfxOCNYaLVgb6cXbkTdhJXq2SIlNMC0xIqhHczDbi8OVzpLSUa0WebRfmigLHqj1EcPZnwf7gbDIrYVRyEinurj6jTBHyI7pqVrFQqEbt6TEmZ9v1NRAJNC1xTYxIQh/MmRUlmFQE3qWOW1nqB2TWk1/3tgJV0waVvkFIEeZbHq4ElyKzAmEXOx6gnEVJuWBzmkRJBRPYGZBDsVaOlpSgVJE2yVaAe/0kx/3azBRO0VsbMFZE3CDSZKweZfYIVg+DZ6v7h9GDVOwZPw/PoxKu/fAgwALbDAXf7DdQkAAAAASUVORK5CYII="); } i.icon-_page {

txt:melody.txt

1play(60, 0.500000)
shinoharat👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2024/01/04 12:48

> index.htmlから見ても,server.jsから見ても,docs/melody.txtの相対パスは問題ないと考えております. こちらはブラウザ検証ツールのNetworkタブを見れば、どのようなリクエストが飛んでいるか確認できます。「リクエストのURL間違い」か「サーバが返せていない」のか、まずは切り分けてください。
think49

2024/01/05 02:40

@aaaa____ さん > :8080/getMelody:1 Failed to load resource: the server responded with a status of 404 (Not Found) 通信リクエスト先は "getMelody" なのですか? > index.htmlから見ても,server.jsから見ても,docs/melody.txtの相対パスは問題ないと考えております. "melody.txt" にすべきではないですか?
shinoharat

2024/01/05 05:13

【1】以下のコマンドの結果を教えてください。 $ npm --version $ express --version $ npm ls | grep express $ npm ls -g | grep express 【2】以下のコマンドを実行し、 $ node server.js その後 /getMelody にアクセスしても、同様に404になりますか?
aaaa____

2024/01/05 11:57

@maisumakun 様 Networkタブを開いてみたのですが,「リクエストのURL間違い」か「サーバが返せていない」のかを切り分ける材料等はどこにあるのか伺ってもよろしいでしょうか.
aaaa____

2024/01/05 12:03

@think49様 私の理解が間違っていましたら申し訳ないのですが,`fetch`する先の/getMelodyは自分で定義したからになるのではないでしょうか. また,相対パスの話については,melody.txtはdocsフォルダに格納されているためmelody.txtだけにしてしまうと存在しないパスになってしまうのではないでしょうか.
aaaa____

2024/01/05 12:13 編集

@shiroharat様 お伝えいただいたコマンドの結果を,質問本文に追記させていただきました. 【1】下二つは結果が出力されなかったので,expressがinstallされていないのが原因のようですね. 【2】については,この後に行ってみても404が出てしまいました,おそらくこちらもexpressがないことが原因かもしれません.
maisumakun

2024/01/06 01:10

> Networkタブを開いてみたのですが,「リクエストのURL間違い」か「サーバが返せていない」のかを切り分ける材料等はどこにあるのか伺ってもよろしいでしょうか. 「All」あるいは「Fetch/XHR」に切り替えてください。「JS」は「JavaScriptファイル自体」に関する情報であって、「JavaScriptから起こした通信」を意味するものではありません。
aaaa____

2024/01/06 01:52

@maisumakun様 「Fetch/XHR」に切り替えたものにキャプチャを差し替えました. ご確認宜しくお願いいたします.
maisumakun

2024/01/06 02:42

アクセスした「/getMelody」というパスは、意図通りですか?
think49

2024/01/07 09:33 編集

@aaaa____ さん > 私の理解が間違っていましたら申し訳ないのですが,`fetch`する先の/getMelodyは自分で定義したからになるのではないでしょうか. ・「追記1」の [Request URL] に記載されているURLをブラウザで開いた場合、期待通りの表示になりますか。 ・"getMelody" というファイルがルートディレクトリに存在していますか。 > また,相対パスの話については,melody.txtはdocsフォルダに格納されているためmelody.txtだけにしてしまうと存在しないパスになってしまうのではないでしょうか. "melody.txt" が非公開ディレクトリにあるのならその通りです。 公開ディレクトリ内にあるであろう "getMelody" が "melody.txt" の内容を読み込み、出力する必要があります。
aaaa____

2024/01/07 11:11 編集

@maisumakun様 私が勘違いをしていたかもしれません. /getMelodyは命名のような形で考えていたのですが,/docsに変更をしたところ,404エラーは解消されました. 変更した後のデベロッパツールのキャプチャを質問本文に追記させていただきます.
aaaa____

2024/01/07 11:19

@think49様 "getMelody"というファイル,フォルダはルートディレクトリに存在していないので変更し,"/docs"や"docs/melody.txt"に変更してみたところ,404エラーはでませんでした. しかし期待していた出力結果ではありませんでした.期待しているものは,txtファイルの中身をそのまま出力するものです.
think49

2024/01/07 13:34 編集

@aaaa____ さん "melody.txt" の中身はJavaScriptコードに見えますが、Fetch APIでJavaScriptコードを読み込まなければならない事情があるのでしょうか。 特別な事情がないのであれば、ファイル名を melody.js にでもして、script要素で読み込むのが適切だと思います。 Fetch APIでJavaScriptコードを読み込んだとしても、eval() や new Function で評価しない限りはJavaScriptコードとして実行されません。 実行速度に難があり、意図しない動きも簡単にできてしまうことから eval() や new Function の使用には慎重であるべきと思いますが、どのような意図でこの設計になっているのでしょうか。
aaaa____

2024/01/08 02:06 編集

@thinjk49様 "melody.txt"の内容が分かりにくいものになってしまっていてもうしわけございません. しかしこのテキストファイルの中身はjsコードではなく,あくまでただのテキストとなります. 意図としましては,他のプログラムによって"melody.txt"を書き換え,その内容によってWebAudioAPIの挙動を制御しようとしています. ですので,eval()等で評価することは考えておりません. 追記 現在実行してみたところ,想定通りにテキストファイルの内容をコンソールに出力することができていました. キャッシュか何かでおかしくなっていたのかもしれません,解決いたしました. ご協力いただきありがとうございました.
guest

回答1

0

ベストアンサー

追記ありがとうございます。

既にお気づきかと思いますが、express がインストールされていないため、サーバー側の app.get('/getMelody', ...) が有効になっていないものと思われます。
なので、クライアントからこの url にリクエストしても当然 404 となります。

以下のドキュメントを参考にインストールを行ってみてください。
https://expressjs.com/ja/starter/installing.html

投稿2024/01/05 13:53

shinoharat

総合スコア1685

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaa____

2024/01/08 02:07 編集

やはりそうですよね,インストールが必要なものだとは考えが及んでいませんでした. 調査不足で申し訳ございません. 参考サイトまでご記載いただきありがとうございます. しかし,私の行い方が悪いのか,サイトの通りにやってみたつもりではあるのですが,expressのインストールを確認できはしたものの,いまだ404エラーが続いてしまっています. バージョン情報やコマンドの結果などは改めて質問本文に追記させていただきました. どこか違和感のある場所や,他に確認すべき場所などがあればご指摘いただけると幸いです. お手数おかけしますが何卒宜しくお願いいたします. 追記 "/getMelody"としていたところを"/docs",または"/docs/melody.txt"としたところ,404エラーは出なくなりましたが,melody.txtの内容そのままの出力を期待していたのですが,メタデータのようなものが出力されており,なぜそのようなことになったのかをお聞かせ願えれば幸いです. 結果は質問本文に追記させていただきます. 追記2 キャッシュか何かの影響でメタデータのようなものが出てしまっていたのか,今しがた実行してみたところテキストファイルの内容を想定通り出力することができていました. ご協力ありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問