1

I am trying to send an http response in node to print results in the browser. The simplified source code is down below. Basically, all the variables are defined somewhere in the program, so that shouldn't be problem. When I try to run the script, I keep getting the error:

    http.js:783
        throw new TypeError('first argument must be a string or Buffer');

    TypeError: first argument must be a string or Buffer

So can someone familiar with node.js or javascript syntax let me know what the problem is?

    upload = function(req, res) {
        var fileInfos = [obj, obj];    //defined as an array of objects
        var counter = 0;           
        counter -= 1;
        if (!counter) {                
            res.end({files: fileInfos});    //files is defined. 
        }
        };

    async.forEach(urls, downloadFile, function (err) {    //all params defined. 
        if(err){
            console.error("err");
            throw err;
        }
        else{
            http.createServer(function(req, res){
            upload(req1, res);                       //req1 defined as an array of objects.
        }).listen(3000, "127.0.0.1");
        console.log('Server running at http://127.0.0.1:3000/');
    }
    });
4

2 に答える 2

1

JSON.stringify() を使用して、クライアントに送信する前に JavaScript オブジェクトを文字列に変換できます。

res.end(JSON.stringify({files: fileInfos}));
于 2013-09-24T17:22:50.640 に答える
1

response.writeこのエラーは、多くの場合、間違った型のパラメーターで呼び出しを試みたことが原因で発生します。ドキュメントを見ると、次のことが示唆されています。

response.end([データ], [エンコーディング])#

このメソッドは、すべての応答ヘッダーと本文が送信されたことをサーバーに通知します。そのサーバーは、このメッセージが完了したと見なす必要があります。メソッド response.end() は、各応答で呼び出されなければなりません。

dataが指定されている場合は、response.write(data, encoding) に続いて response.end() を呼び出すのと同じです。

チャンクresponse.write( chunk, encoding )が文字列であることを期待するようになったため、呼び出し時res.end({files: fileInfos})にそのオブジェクトの内容を文字列として書き込めない可能性があるようです。

于 2013-08-05T16:49:37.777 に答える