尝试发布时我遇到此错误
> process.nextTick(function() { throw err; });
> ^
>
> TypeError: first argument must be a string or Buffer
> at ServerResponse.OutgoingMessage.end (_http_outgoing.js:524:11)
错误表明mongodb模块中的 utils 和 cursor 出了问题,但它们是什么?
在GET上一切都很好但在POST上刹车(邮差和文本传递{“名称”:“计算机”,“价格”:2500}) - 我无法追踪哪个模块或实例正在制动代码。
这是我与db的结合:
// Our primary interface for the MongoDB instance
var MongoClient = require('mongodb').MongoClient;
// Used in order verify correct return values
var assert = require('assert');
var connect = function (databaseName, callBack) {
var url = 'mongodb://localhost:27017/' + databaseName;
MongoClient.connect(url,
function (error, database) {
assert.equal(null, error);
console.log("Succesfully connected to MongoDB instance!");
callBack(database);
});
};
exports.find = function (databaseName, collectionName, query, callback) {
connect(databaseName, function (database) {
var collection = database.collection(collectionName);
collection.find(query).toArray(
// Callback method
function (err, documents) {
// Make sure nothing went wrong
assert.equal(err, null);
// Print all the documents which we found, if any
console.log("MongoDB returned the following documents:");
console.dir(documents)
callback(err, documents);
// Close the database connection to free resources
database.close();
})
})
};
exports.insert = function (databaseName, collectionName, object, callback) {
connect(databaseName, function (database) {
var collection = database.collection(collectionName);
collection.insert(document, {w: 1}, function (err, documents) {
console.log("Added a new document");
console.log(documents[0]);
callback(err, documents[0]);
});
})
};
exports.remove = function (databaseName, collectionName, object, callback) {
connect(databaseName, function (database) {
var collection = database.collection(collectionName);
collection.remove(object, function (err, result) {
callback(err, result);
database.close();
});
})
};
答案 0 :(得分:0)
这个问题实际上很简单,所以我很惊讶你没有收到更好的错误信息。
在您的代码中:
collection.insert(document, {w: 1}, function (err, documents) {
console.log("Added a new document");
console.log(documents[0]); // I expect this to log undefined
callback(err, documents[0]);
});
传递给collection.insert
回调的第二个参数实际上是结果对象,而不是插入的文档。因此,documents[0]
最终成为undefined
,因为它不是一系列文档。因此,当您尝试发送undefined
作为回复时,它就会失败。
如果您打算传递新创建的文档,则必须使用result
对象获取_id并将其附加到您插入的文档中。
作为旁注,我会考虑保持对数据库的连接,而不是每次想要与Mongo交谈时都创建新连接。