【问题标题】:Something is breaking my Node.js HTTP requests and I don't know what is breaking it有东西破坏了我的 Node.js HTTP 请求,我不知道是什么破坏了它
【发布时间】:2013-03-22 03:48:36
【问题描述】:

我正在使用通用 Node.js HTTP 请求脚本解析大约 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 中,我收到此错误,这会停止整个脚本。我不知道 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 中是不允许的,我应该逃避它。但问题仍然存在 - 如果我的密钥只有 urlstatusCodeheaders,是什么导致其中包含 . 的密钥出现?

编辑:发现错误。在下面回答。

【问题讨论】:

  • key page.ly must not contain '.' 似乎不言自明
  • 我认为错误信息“key must not contain '.'”很有描述性。向我们展示您的save 方法
  • save 方法是 db.scrape.save(obj);
  • 是什么导致带有 . 的键出现?” - 几乎每个 URL 中都有一些点
  • 我理解这部分。但是不可能有一个带有'.'的键。更不用说page.ly了,因为我为每个 URL 设置的三个键是 urlheaderstatusCode。这是困扰我的部分。由于脚本是异步工作的,我无法确定是哪个 URL 导致了问题。

标签: javascript node.js http request


【解决方案1】:

当您尝试在 MongoDB 中持久化一个对象并且一个(或多个)键包含字符“.”时会导致此错误,例如:

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

会引发错误Error: key some.field must not contain '.'

在保存到 MongoDB 之前清理您的 '.' 对象键!

【讨论】:

  • 这很奇怪。如果这些对象键立即保存到 Mongo,我该如何清理它们?
  • 我找到了。一些网站的标题有一个叫做 page.ly: v4.0 的东西。我不知道那是什么,但显然存在这样的东西。
【解决方案2】:

网站“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多