-3

一般的なNode.jsHTTPリクエストスクリプトを使用して約4000のURLを解析しています。

(function (i){
            http.get(options, function(res) {

                var obj = {};
                obj.url = hostNames[i];
                obj.statusCode = res.statusCode;
                obj.headers = res.headers;

                db.scrape.save(obj);

            }).on('error',function(e){
        console.log("Error: " + hostNames[i] + "\n" + e.stack);
        })
    })(i);

約1300のURLでこのエラーが発生し、スクリプト全体が停止します。URLのリストにpage.lyがないため、page.lyが何であるかわかりません。私は多くの調査を行いましたが、このエラーの原因を特定できませんでした。

誰かがNode.jsでのHTTPリクエストに精通している場合、私を助けてくれませんか?

Error: key page.ly must not contain '.'
    at Error (unknown source)
    at Function.checkKey (/Users/loop/node_modules/mongojs/node_modules/mongodb/node_modules/bson/lib/bson/bson.js:1421:11)
    at serializeObject (/Users/loop/node_modules/mongojs/node_modules/mongodb/node_modules/bson/lib/bson/bson.js:355:14)
    at packElement (/Users/loop/node_modules/mongojs/node_modules/mongodb/node_modules/bson/lib/bson/bson.js:854:23)
    at serializeObject (/Users/loop/node_modules/mongojs/node_modules/mongodb/node_modules/bson/lib/bson/bson.js:359:15)
    at Function.serializeWithBufferAndIndex (/Users/loop/node_modules/mongojs/node_modules/mongodb/node_modules/bson/lib/bson/bson.js:332:10)
    at BSON.serializeWithBufferAndIndex (/Users/loop/node_modules/mongojs/node_modules/mongodb/node_modules/bson/lib/bson/bson.js:1502:15)
    at InsertCommand.toBinary (/Users/loop/node_modules/mongojs/node_modules/mongodb/lib/mongodb/commands/insert_command.js:132:37)
    at Connection.write (/Users/loop/node_modules/mongojs/node_modules/mongodb/lib/mongodb/connection/connection.js:198:35)
    at __executeInsertCommand (/Users/loop/node_modules/mongojs/node_modules/mongodb/lib/mongodb/db.js:1745:14)
    at Db._executeInsertCommand (/Users/loop/node_modules/mongojs/node_modules/mongodb/lib/mongodb/db.js:1801:5)
Loops-MacBook-Air:JS loop$ 

何がこれを防ぐことができますか?私のスクリプトはあまりうまくスケーリングしていないようです。

編集:私が得ている答えから-MongoDBでは許可されていない「。」を持つキーがどこかに存在し、それをエスケープすることになっています。しかし、疑問は残ります-私のキーが、、、およびだけurlである場合、中にが含まれているキーが表示される原因は何ですか?statusCodeheaders.

編集:バグが見つかりました。以下に答えてください。

4

2 に答える 2

3

このエラーは、MongoDBでオブジェクトを永続化しようとしたときに、1つ(または複数)のキーに文字「。」が含まれている場合に発生します。例:

{
  "name": "bob",
  "url": "http://example.com",
  "some.field": "value"
}

エラーが発生しますError: key some.field must not contain '.'

MongoDBに保存する前に、「。」のオブジェクトキーをスクラブしてください。

于 2013-03-21T14:51:54.740 に答える
1

サイト「divensurf.com」には、と呼ばれるヘッダーがありますpage.ly: v4.0

が何であるかはわかりませんが、キーはシンボルにできないため、MongoDB へのインポートが壊れました。出力を .txt ファイルに出力して犯人を見つけ、 header を検索しpage.ly、サイトを見つけて削除しました。

インポートする前にヘッダーをサニタイズします。

助けてくれてありがとう。

HTTP/1.1 304 Not Modified
X-Varnish: 2236761436 2236710300
Vary: Accept-Encoding,Cookie,X-UA-Device
Cache-Control: max-age=7200, must-revalidate
X-Cache: V1HIT 5
Content-Type: text/html; charset=UTF-8
Page.ly: v4.0
Content-Encoding: gzip
X-Pingback: http://divensurf.com/xmlrpc.php
Date: Thu, 21 Mar 2013 19:45:35 GMT
Accept-Ranges: bytes
Via: 1.1 varnish
Connection: keep-alive
Last-Modified: Thu, 21 Mar 2013 19:40:57 GMT
Age: 278
于 2013-03-21T19:48:36.340 に答える