1. ホーム
  2. node.js

[解決済み] nodejs - http.requestでresponse.writeを使用する場合、第一引数は文字列またはBufferでなければなりません。

2022-01-29 15:22:29

質問

私は、単に与えられたURLのHTTPステータスを出力するノードサーバーを作成しようとしています。

res.write でレスポンスをフラッシュしようとすると、次のエラーが発生します: throw new TypeError('first argument must be a string or Buffer')(最初の引数は文字列またはバッファでなければなりません)。

しかし、それらをconsole.logに置き換えると、すべてがうまくいきます(しかし、私はコンソールではなくブラウザにそれらを書き込む必要があります)。

コードは

var server = http.createServer(function (req, res) {
    res.writeHead(200, {"Content-Type": "text/plain"});

    request({
        uri: 'http://www.google.com',
        method: 'GET',
        maxRedirects:3
    }, function(error, response, body) {
        if (!error) {
            res.write(response.statusCode);
        } else {
            //response.end(error);
            res.write(error);
        }
    });     

    res.end();
});
server.listen(9999);

私はどこかにコールバックを追加する必要があると信じていますが、かなり混乱しているので、どんなヘルプでも感謝します。

解決方法は?

Requestはコールバックメソッドを取り、それは非同期です。ということは、コールバックが実行されるまでに res.end() が呼び出される可能性があります。コールバック内でリクエストを閉じてみてください。