読者です 読者をやめる 読者になる 読者になる

Kashiyuki Blog

公務員試験・院試などの情報や物理・天文、たまにプログラミング系

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

SPONSORED LINK

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という拡張子の情報を保存していたのかもしれません。

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