2013-03-21 53 views
-3

我在約4000網址與通用Node.js的HTTP請求腳本解析:東西是打破我的Node.js的HTTP請求,我不知道什麼是打破它

(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網址,我得到這個錯誤,它停止了整個腳本。我不知道page.ly是什麼,因爲我沒有在我的URL列表中。我做了很多研究,但是我無法指出導致這個錯誤的原因。

如果有人熟悉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,是什麼原因導致其中出現.的密鑰出現?

編輯:發現錯誤。下面回答。

+0

'鍵page.ly不能包含」 .''似乎不言自明 – 2013-03-21 14:48:45

+0

,我認爲錯誤消息‘*鍵不能包含‘’*’相當描述。向我們展示你的'save'方法 – Bergi 2013-03-21 14:50:31

+0

'save'方法是db.scrape.save(obj); – theGreenCabbage 2013-03-21 15:09:40

回答

3

當您試圖堅持在MongoDB中的對象和一個(或多個)的鍵包含的字符,該錯誤造成的,e.g「」:

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

會引發錯誤Error: key some.field must not contain '.'

在保存到MongoDB之前擦除'。's的對象鍵!

+0

這很奇怪。如果這些對象密鑰立即保存到Mongo中,我該如何擦除這些對象密鑰? – theGreenCabbage 2013-03-21 15:10:28

+0

我找到了。某些網站的標題有一個名爲page.ly:v4.0的東西。 我不知道那是什麼,但顯然存在這樣的事情。 – theGreenCabbage 2013-03-21 19:43:58

1

網站「divensurf.com」有一個被稱爲page.ly: v4.0

頭我不知道的是什麼,但打破了我的導入到MongoDB的,因爲密鑰不能符號。我通過將輸出結果打印到.txt文件中找到了罪魁禍首,對頭部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