Node.jsを使っていてhtmlファイルを読み込めないときの解決法

Node.jsいじってたらこんなエラーと出会いました。

_http_outgoing.js:439
throw new TypeError('first argument must be a string or Buffer');
^
TypeError: first argument must be a string or Buffer
at ServerResponse.OutgoingMessage.write (_http_outgoing.js:439:11)
at ReadFileContext.callback (/Users/kashiwadayuuki/Dropbox/ドットインストール/node.js/server.js:14:7)
at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:324:13)

hello.htmlを読みこませるコードを書いているのにエラーになる。。なぜだ。。

今回やっていることは、
* server.jsで/public_html/hello.jsを読み込む
という内容です。

ちなみにserver.jsのコードはこちら

var http = require('http'),
fs = require('fs');
var settings = require('./settings');
var server = http.createServer();
var msg;
server.on('request', function(req, res) {
fs.readFile(__dirname + '/public_html/hello.html', 'utf-8', function(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();
});
});
server.listen(settings.port, settings.host);
console.log("server listening ...");

こうやって、今回使っているドットインストールの動画をそれこそ10回くらい見直して、コードに間違いがないかどうかめちゃくちゃチェックしまりました。

しかし全然エラーが消えないわけです。

ターミナルでlsでファイルの表示をしたら解決した

ターミナルを使ったら解決しました。

lsでファイルやディレクトリの一覧を見ることができます。
ディレクトリという単語を知らなかった方は、フォルダの別名と思っていてもらえれば大丈夫です。

ターミナルでlsというのがよくわからない方はこちらのサイトが参考になるかと思います。

techacademy.jp

Finder上では

public_html
となっていたのに、ターミナルで見ると
public_html.html
となっていたのです。

これは、最初にpublic.htmlというフォルダ名で保存したのをpublic_htmlというフォルダ名に変更したためでした。
Finderが.htmlという拡張子の情報を保存していたのかもしれません。

というわけで、一見落着です。

メニューを閉じる