質問: path.resolve(__dirname, filePath); fs.readFile(fullPath, 'utf-8' , (err, data) => { if (err) { res.writeHead(404, {'Content-Type': 'text/plain'}); res.write('not found!'); return res.end(); } res.writeHead(200, {'Content-Type': 'text/html'}); res.write(data); res.end(); }) }); ``` ``` ``` ### 試したこと path.resolveでpathを結合すればいいという記述を見かけたので、やってみましたがうまくいきませんでした。
回答: Node.jsがこれをどう解釈するかは、`path.parse(__dirname)`あたりで確認出来ると思います。 ``` const path = require('path'); console.log(path.parse(__dirname)); ``` > > 以下のコードのままではおそらくpathに関するエラーが出てきてしまいます。 > > > だとしても下記のようなコードでいくらでも逃げられるのでどうとでもなります。 この2つを併用すれば解決すると思いますよ。 表題とは直接関係ありませんが、 Node.jsがデフォで提供しているhttpモジュールは人間が触るライブラリではないので、 Express.jsを覚えて使って下さい。 ホーム、解説、ガイドまでは有志の方がきっちり日本語で解説してくださってるので、 公式サイトのこの3項目を読むだけで一通りの事ができるようになります。 Node.jsのhttpモジュールの駄目な一例を紹介しますと、 例えば質問文のコードではJSファイルもHTMLファイルも問答無用で`text/html`と返そうとしていますが、 お前Webサーバ舐めてんのかと言われちゃいますよ? これを解決するのであれば、 拡張子を取り出してこのファイルの拡張子だったらtext/javascript...みたいな条件分岐が死ぬほど必要です。 一体何行のコードになるのか今から楽しみですね。 静的ファイル返すだけの超シンプルなサーバーでこれだから人間が触るライブラリじゃないでしょというわけです。 もしこれがExpress.jsだったらstaticを使ってローカルマシンのパスと繋げるだけ、1行で終わります。 やり方は公式のガイド読めば出来るようになります。 楽ちんですね。