【发布时间】: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 中是不允许的,我应该逃避它。但问题仍然存在 - 如果我的密钥只有 url、statusCode 和 headers,是什么导致其中包含 . 的密钥出现?
编辑:发现错误。在下面回答。
【问题讨论】:
-
key page.ly must not contain '.'似乎不言自明 -
我认为错误信息“key must not contain '.'”很有描述性。向我们展示您的
save方法 -
save方法是 db.scrape.save(obj); -
“是什么导致带有 . 的键出现?” - 几乎每个 URL 中都有一些点
-
我理解这部分。但是不可能有一个带有'.'的键。更不用说
page.ly了,因为我为每个 URL 设置的三个键是url、header和statusCode。这是困扰我的部分。由于脚本是异步工作的,我无法确定是哪个 URL 导致了问题。
标签: javascript node.js http request